soarli

记一次从Tomcat到Nginx的大迁移
近期学习的Nginx知识笔记,内容原创,转载请注明来源!今天下午,对diannao120.top完成了一次从Tom...
扫描右侧二维码阅读全文
27
2020/01

记一次从Tomcat到Nginx的大迁移

近期学习的Nginx知识笔记,内容原创,转载请注明来源!

今天下午,对diannao120.top完成了一次从Tomcat到Nginx的大迁移,迁移内容包括一级目录、二级目录和SSL证书,紧接着针对nginx优化了客户端访问及缓存机制,最后还意外地实现了一次简单的页面优化。

废话不说,直接上代码:

    server {
        listen       80;
        server_name  diannao120.top;

        expires 1d; 

        #针对http协议的重定向
        rewrite ^(.*)$ https://$host$1 permanent;

        location / {
            index index.html index.htm;
        }

        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

#本段原则上讲可删除,严谨起见加上了
    server {
        listen       80;

        expires 1d; 

        server_name  127.0.0.1;
        return  301 $scheme://127.0.0.1;

    }


    server {
        listen       443 ssl;
        
        #下面是服务器ip,安全起见,用xx表示
        server_name  xx.xx.xx.xx;

        expires 1d; 

        #下面是证书位置,安全起见,用xxx表示
        ssl_certificate      C:/xxx/xxx.pem;
        ssl_certificate_key  C:/xxx/xxx.key;
        return  301 $scheme://127.0.0.1;
    }   


    server {
        listen       443 ssl;
        server_name  diannao120.top diannao120.top/blog www.diannao120.top www.diannao120.top/blog ;

        expires 1d; 

        ssl_certificate      C:/xxx/xxx.pem;
        ssl_certificate_key  C:/xxx/xxx.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        #socket安全校验码,用xxxxxx表示
        ssl_ciphers  xxxxxx;
        ssl_prefer_server_ciphers  on;


        location /blog {
            root   C:/xxxx/;
            index  index.html index.htm;
        }

        location / {
            root   C:/xxx/ROOT;
            index  index.html index.htm;
        }


        error_page  404              /404.html;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


    server {
        listen       443 ssl;
        server_name  127.0.0.1;
        expires 1d; 
        ssl_certificate      C:/xxx/xxx.pem;
        ssl_certificate_key  C:/xxx/xxx.key;
    }    

看起来挺简单的,但实际上踩了不少的坑,将其与主要内容一并整理如下:

  • 重定向使用了正则表达式
  • expires 1d表示用户端缓存1天,1h是一小时,1y是一年(分别对应Cache-Control: max-age=86400;Cache-Control: max-age=3600;Cache-Control: max-age=31536000),使用此方法在用户重复访问时能够极大地节约服务器资源(用户优先从memory cache和disk cache中寻找),配置过程可在审查元素中检验
  • 既然使用socket加密,404要在ssl服务器有对应
  • 多个server并存时,一定要注意逻辑上的先后顺序
  • 配置socket时,ssl一定不要少,否则ng可能无法开启(阿里云这么说的)
  • 多个server name时,中间以空格隔开
  • www.应被理解为二级域名(待向大佬求证)
  • 用location指定二级目录时,其root只需到达其上一层目录(被这个问题困扰了近1小时)
  • could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32报错时,在配置文件的http{}段增加一行配置server_names_hash_bucket_size 64;如果64还不够,那么就按32的倍数往上加。
  • 速度优化:之前发现有一栏目访问极慢,仔细查看不难发现其以来的很多js和css在各种各样的CDN服务器上,把其迁移到自己的云服务器,访问速度顿时快了几十倍!

参考文献:

https://segmentfault.com/a/1190000009237425

https://blog.csdn.net/tjcyjd/article/details/50897959

https://www.cnblogs.com/wenyule/p/11073277.html

https://blog.csdn.net/tianmohust/article/details/8472102

https://www.cnblogs.com/lovelinux199075/p/9057526.html

https://www.jb51.net/article/26412.htm

https://blog.csdn.net/tianmohust/article/details/7037290

https://www.centos.bz/2018/01/nginx%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3the-plain-http-request-was-sent-to-https-port%E9%94%99%E8%AF%AF/

https://help.aliyun.com/document_detail/98728.html?spm=5176.2020520154.cas.13.654356a7q6YyvL

笔记内容原创,转载请注明来源!

最后修改:2020 年 04 月 08 日 06 : 11 PM

发表评论