• Nginx(四) absolute_redirect、server_name_in_redirect、port_in_redirect 请求重定向指令组合测试


            本篇文章主要用来测试absolute_redirect、server_name_in_redirect和port_in_redirect三个指令对Nginx请求重定向的影响,Nginx配置详解请参考另一篇文章 Nginx(三) 配置文件详解 

            接下来,在Chrome无痕模式下进行测试。 

    测试1:absolute_redirect=on; server_name_in_redirect off; port_in_redirect on; #默认配置

    absolute_redirect on;
    server_name_in_redirect off;
    port_in_redirect on;

    server {
        listen 8688;
        server_name www.reade*******.cn;

        root pages;

        location /s {
            return 301 /test.html;
        }

        location / {
            index  index.html index.htm;
        }
    }

    请求地址: http://www.47.**.**.80.cn:8688/s

    请求结果:Location: http://47.**.**.80:8688/test.html

    Location = 原始请求Host:Nginx监听端口/uri

    客户端接收到301 Code后,以Location返回值为全新的URL重新发送一次请求。

    服务端告诉客户端,我搬家了,这是新家的地址Location,以后按照这个新地址找我。

    测试2absolute_redirect=off; server_name_in_redirect off; port_in_redirect on;

    请求地址: http://www.reade*******.cn:8688/s

    请求结果:Location: /test.html

    客户端接收到301 Code后,以Location返回值为新的URI重新发送一次请求,Host和port不变。

    服务端告诉客户端,我家前门坏了,你从后门进来,后门在这Location。

            测试1、2最后重新发起请求的地址都是 http://www.reade*******.cn:8688/test.html,虽然结果相同,但根本逻辑还是不一样的。

     测试3:absolute_redirect=on; server_name_in_redirect on; port_in_redirect on;

    修改配置文件server_name为IP。

    absolute_redirect on;
    server_name_in_redirect on;
    port_in_redirect on;

    server {
        listen 8688;
        server_name 47.**.**.80;
        root pages;
        location /s {
            return 301 /test.html;
        }
        location / {
            index  index.html index.htm;
        }
    }

    请求地址: http://www.reade*******.cn:8688/s

    请求结果:Location: http://47.**.**.80:8688/test.html

    非80/443端口:Location=server_name:Nginx监听端口/uri

    Nginx将原请求中的Host替换为server_name,客户端接收到301 Code后,以Location返回值为全新的URL重新发送一次请求。

    测试4:absolute_redirect=on; server_name_in_redirect on; port_in_redirect off;

    请求地址: http://www.reade*******.cn:8688/s

    请求结果:Location: http://47.**.**.80/test.html

    Location=server_name/uri

    Nginx此时返回的Location中没有port,未将监听的port添加的Host后。

    测试5:absolute_redirect=on; server_name_in_redirect off; port_in_redirect off;

    请求地址: http://www.reade*******.cn:8688/s

    请求结果:Location: http://www.reade*******.cn/test.html

    Location=原始请求Host/uri

    Host没有替换,请求地址中没有port。

            经过上面的5个测试,我们可以更深刻的理解 absolute_redirect、server_name_in_redirect、port_in_redirect这三个指令的作用。另外,需要特殊说明下,当我们访问80或443端口时,无论port_in_redirect 是否开启,Location中都不会有port,这应该算是第6个测试,所以上面三个参数无论如何配置,一共是六种重定向结果。更详细的讲解请参考这篇文章

  • 相关阅读:
    ES几个比较重要的DSL语句
    Linux CentOS7 lrzsz工具
    springcloud面试题及答案
    第52篇-某驾校登录参数sign分析【2022-08-19】
    别以为逃离大城市你就能舒适了,小城市可比你想象的内卷!
    力扣记录:Hot100(3)——46-72
    项目(交友)
    【leetcode top100】两数相加。无重复字符的最长子串,盛水最多的容器,三数之和
    记我第一次做线下技术分享的那些事
    配置公网和私网用户通过非公网口的IP地址访问内部服务器和Internet示例
  • 原文地址:https://blog.csdn.net/ShenDaiSun/article/details/134453231