一次Nginx修改跳转实例

2017-04-25 21:03

今天公司运营部发来需求,说为了方便百度搜索,需要把一个叫www.life1.cc  的域名做301跳转到www.lechange.com  。


这个需求很简单,由于life1.cc不是我公司的域名,所以就是该公司的运维做联系,拜托人家把这个域名绑定到公司的nginx上,然后登陆nginx,找到nginx.conf,发现里面include很多配置文件,节选配置如下:

        #include upstream
        include upstream.conf;
        
        # include servers
        include rs.conf;
        include web-cn.conf;
        include web-com.conf;
        include dms-smsgw.conf;    
        
}

既然是要跳转到www.lechange.com  ,就打开web-com.conf,里面server段是这么写的:

server {
        #web
        listen 80;
        listen 443 ssl;
        server_name lechange.com lechange.com:443 *.lechange.com *.lechange.com:443;
        chunked_transfer_encoding off;
        proxy_buffering off;

于是找到location=/做一个  rewrite就好了,如下:

location = / {
           #root /mnt/hswx/nginx/html/;
           #index index.html;
    #rewrite ^/    redirect;   #之前一直是302跳转,于是把这个注释
    rewrite ^/   permanent;    #这个是301
        }


然后reload nginx,打开浏览器,然后在地址栏里输入www.life1.cc  ,发现的确跳转去了www.lechange.com ,但是通过F12 查看,跳转方式还是302,如图:


清除了缓存,刷新界面但是还是302,而转用#curl看也是302,如图:


这就搞得很蒙圈了,明明在配置文件里面把301 permanent加进去了,为什么不出现301?


然后就怀疑是不是在阿里的域名解析台里有过什么动作,但是查来查去也没什么收获,里面只有对www.lechange.com 的域名解析,重点还是要查一下nginx的配置。


后来发现了,原来nginx.conf里include字段是顺序是这样的:

        include web-cn.conf;
        include web-com.conf;

也就是说目标的网站如果是com的话,就会走web-com.conf,如果网站是cn的话就会走 web-cn.conf,但是我们这里需要修改的网站是www.life1.cc ,这个是以cc结尾的,既不是com也不是cn,那么conf配置会按照上下顺序去以 web-cn.conf为准。


#vim web-cn.conf,看到里面的server的配置: 

server {
        #web
        listen 80;
        listen 443 ssl;
        server_name lechange.cn lechange.cn:443 *.lechange.cn *.lechange.cn:443;
        chunked_transfer_encoding off;
        proxy_buffering off;


然后在下面更改了rewrite: 

        location = / {
                #root /mnt/hswx/nginx/html/;
                #index index.html;
                rewrite ^/ https://www.lechange.com permanent;
        }
}


这个时候在浏览器重新尝试www.life1.cc ,果然301 永久重定向成功!