• 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;
        }
    }
  • 相关阅读:
    再也不用为word 中表达式的上标和下标发愁了
    创建链接
    ps钢笔工具隐藏的知识。
    学Ps个人遇到的小细节
    新手琢磨ps,学问深着呢。。
    数据库2012终于知道数据库攻击注入参数
    想脱离鼠标,不想要鼠标就只想用键盘完成所有编程,你说可能吗?
    vs2013中的快捷键
    如何在C/C++中动态分配二维数组【转载】
    转载:C++的那些事:表达式与语句
  • 原文地址:https://www.cnblogs.com/geektcp/p/15951525.html
Copyright © 2020-2023  润新知