nginx强制301重定向的诡异问题


问题

打开设计平台官网: http://baigong.xxx.cn/Products/designPlatform 刷新这个链接,就自动重定向到如下路径: http://baigong.xxx.cn:9000/Products/designPlatform/ 而公网的域名服务器9000是没有开放的,也是就说baigong.xxx.cn:9000是无法打开的。 

预期目标

http://baigong.xxx.cn/Products/designPlatform 刷新这个链接,就自动重定向到如下路径:  http://baigong.xxx.cn/Products/designPlatform/ 

分析

nginx有个自带的特性,这个特性之前一直没注意到,那就是遇到目录就自动重定向到新的路径,这个新的路径uri是一样的,但多了斜杠。 例如上面的链接的 /Products/designPlatform 其实是个目录。 正常情况下nginx就会重定向,也就是在原有路径的情况再增加一个斜杠。 由于经过多层转发,导致端口发生了变化。而在底层转发时,$host是没有发生变化的。但是端口转发了,从80变成了9000 http://baigong.xxx.cn/Products/designPlatform 所以这个链接就自动变成了如下链接。 http://baigong.xxx.cn:9000/Products/designPlatform/ 

解决

这个时候要么rewrite链接,要么开启不进行端口变化的配置,幸好nginx就有个配置项: port_in_redirect 这个配置项默认是on,也就是开启的。 按照当前的预期目标,这里应该是要让端口不变,也就是使用第一层访问的端口80,所以这个配置项必须禁用。 事实上,禁用了这个配置项,问题解决。 完整的配置如下: 
server { listen 9000; server_name baigong.xxx.cn; port_in_redirect off; #charset koi8-r; charset utf-8; #access_log logs/host.access.log main; location / { root html/website; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM