• 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;
        }
    }
  • 相关阅读:
    Codeforces 912E
    Codeforces 912D
    洛谷P4980 【模板】Polya定理
    51nod1222最小公倍数计数
    15 Puzzle LightOJ
    loj2734「JOISC 2016 Day 2」女装大佬 || 洛谷P3615 如厕计划
    Jongmah Codeforces
    洛谷P4238【模板】多项式求逆
    洛谷P4721 【模板】分治 FFT
    FFT,NTT
  • 原文地址:https://www.cnblogs.com/geektcp/p/15951525.html
Copyright © 2020-2023  润新知