今天公司运营部发来需求,说为了方便百度搜索,需要把一个叫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 永久重定向成功!