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;
    }
}
posted @ 2022-03-01 17:42  狂奔的骆驼  阅读(783)  评论(0编辑  收藏  举报