美文网首页
nginx配置指令absolute_redirect、port_

nginx配置指令absolute_redirect、port_

作者: boldcautious | 来源:发表于2019-08-14 20:05 被阅读0次

指令说明

根据官网翻译的指令说明,括号中为翻译时添加的个人理解

语法: absolute_redirect on | off;
默认值: absolute_redirect on;
上下文: http, server, location
这个指令出现在版本 1.11.8.
如果关闭(指定为off),nginx发起的重定向是相对的(响应头Location中的URL)。

请参考server_name_in_redirect和port_in_redirect指令。

语法: port_in_redirect on | off;
默认值: port_in_redirect on;
上下文: http, server, location
开启或关闭nginx发起绝对重定向(absolute_redirect on)时指定端口。

重定向中首要主机名的使用由server_name_in_redirect指令控制。

语法: server_name_in_redirect on | off;
默认值: server_name_in_redirect off;
上下文: http, server, location
开启或关闭nginx将server_name指令指定的首要虚拟主机名用于发起的绝对重定向(absolute_redirect on)的功能。关闭此功能时(server_name_in_redirect off),nginx将使用“Host”请求头中的名字,如果没有此请求头,nginx将使用虚拟主机所在的IP地址。

重定向中端口的使用由port_in_redirect指令控制。

实例演示

官网的指令说明比较简单,下面将结合nginx配置及请求示例详细说明。
这三个指令影响的是301、302跳转指定的URL为相对路径时,响应头Location字段,如果rewrite重写或return时的URL以“http://”或“https://”开头,则不受影响。

    server {
        listen       8080;
        server_name  www.mytest.com;

        location /default/ {
            absolute_redirect on;
            port_in_redirect on;
            server_name_in_redirect off;
            rewrite ^(.*)$ /prefix$1 redirect;
        }
        location /port_off/ {
            absolute_redirect on;
            port_in_redirect off;
            server_name_in_redirect off;
            rewrite ^(.*)$ /prefix$1 redirect;
        }
        location /server_name_on/ {
            absolute_redirect on;
            port_in_redirect on;
            server_name_in_redirect on;
            rewrite ^(.*)$ /prefix$1 redirect;
        }
        location /absolute_off/ {
            absolute_redirect off;
            port_in_redirect on;
            server_name_in_redirect on;
            rewrite ^(.*)$ /prefix$1 redirect;
        }
        location /default_return/ {
            absolute_redirect on;
            port_in_redirect on;
            server_name_in_redirect off;
            return 302 /prefix$uri;
        }
        location /absolute/ {
            absolute_redirect on;
            port_in_redirect on;
            server_name_in_redirect off;
            rewrite ^(.*)$ http://test.test.com$1;
        }
    }
    server {
        listen       80;
        server_name  www.mytest.com;

        location /default/ {
            absolute_redirect on;
            port_in_redirect on;
            server_name_in_redirect off;
            rewrite ^(.*)$ /prefix$1 redirect;
        }
    }

注:为避免浏览器或命令行程序发请求时自动携带Host请求头,文中示例用nc发起HTTP请求。

  1. # echo -ne "GET /default/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://127.0.0.1:8080/prefix/default/index.html
    默认配置下,如果请求没有Host头,则响应头Location的URL,包含IP和端口号(如果端口是80则不显示,见第10条)

  2. # echo -ne "GET /default/index.html HTTP/1.0\r\nHost: www.myexample.com\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://www.myexample.com:8080/prefix/default/index.html
    默认配置下,如果请求中含有Host头,则响应头Location的URL使用Host的域名

  3. # echo -ne "GET /default/index.html HTTP/1.0\r\nHost: www.myexample.com:9000\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://www.myexample.com:8080/prefix/default/index.html
    默认配置下,如果请求中含有Host头且Host头中包含端口,但响应头Location的URL依然使用请求时采用的端口号,而不是Host头中指定的端口号

  4. # echo -ne "GET /port_off/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://127.0.0.1/prefix/port_off/index.html
    如果指定port_in_redirect off,则响应头Location的URL中没有端口号

  5. # echo -ne "GET /server_name_on/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://www.mytest.com:8080/prefix/server_name_on/index.html
    如果指定server_name_in_redirect on,则响应头Location的URL的域名使用server_name指令指定的首要虚拟主机名

  6. # echo -ne "GET /server_name_on/index.html HTTP/1.0\r\nHost: www.myexample.com\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://www.mytest.com:8080/prefix/server_name_on/index.html
    如果指定server_name_in_redirect on,即使请求中含有Host,响应头Location的URL的域名依然使用server_name指令指定的首要虚拟主机名

  7. # echo -ne "GET /absolute_off/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: /prefix/absolute_off/index.html
    如果指定absolute_redirect off,则响应头Location的URL没有域名(IP)和端口号

  8. # echo -ne "GET /default_return/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://127.0.0.1:8080/prefix/default_return/index.html
    类似第一条,return和rewrite的结果是一样的

  9. # echo -ne "GET /absolute/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 8080 | grep Location
    Location: http://test.test.com/absolute/index.html
    如果rewrite后的URL以“http://”或“https://”开头,则不受这三个指令影响

  10. # echo -ne "GET /default/index.html HTTP/1.0\r\n\r\n" | nc 127.0.0.1 80 | grep Location
    Location: http://127.0.0.1/prefix/default/index.html
    即使指定port_in_redirect on,当端口号是80时,响应头Location的URL中也不含有端口号,实际上HTTP默认端口就是80,对请求无影响。

相关文章

  • nginx配置指令absolute_redirect、port_

    指令说明 根据官网翻译的指令说明,括号中为翻译时添加的个人理解 语法: absolute_redirect o...

  • nginx http core module

    nginx http core module absolute_redirect 如果禁用该项,Nginx的反向代...

  • Nginx常用指令配置

    Nginx常用指令配置 先cd进入nginx目录下 启动 start nginx 停止 nginx -s stop...

  • nginx简介和使用2

    nginx由多个经配置文件配置中的指令定义的模块组成,。 指令分为:简单指令和块指令。 简单的指令: 指令名、空格...

  • Nginx负载均衡配置介绍

    目录 Nginx概述 Nginx调度算法 Nginx指令使用 Nginx负载均衡配置参数 1. Nginx概述 N...

  • Nginx详细配置

    Nginx详细配置 默认的config: nginx文件结构 1、全局块:配置影响nginx全局的指令。一般有运行...

  • 如何在Alpine容器中使用nginx

    安装nginx ,输入指令 apk add nginx 配置用户,通过apk直接安装的nginx配置中默认用户是n...

  • linux运维之Nginx(二)

    Nginx(二) 关于配置指令: Main配置段常见的配置指令: 分类: 正常运行必备的配置 优化性能相关的配...

  • Nginx: 基本配置篇

    nginx.conf 配置结构 1、main全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户...

  • 【NGINX入门】8.Nginx的upstream 模块及参数测

    1. 摘要 本文介绍Nginx的upstream模块的指令和参数说明。 2. 配置示例及指令说明 2.1 配置示例...

网友评论

      本文标题:nginx配置指令absolute_redirect、port_

      本文链接:https://www.haomeiwen.com/subject/vujnjctx.html