目录

  • 1.说明
  • 2.语法
  • 3.配置实例
  • 4.更多高级写法 [参考nginx官方文档](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect)

1.说明

proxy_redirect指令用于修改被代理服务器返回的响应头中的Location头域和“Refresh”头域,与proxy_pass指令配合使用。

比如,Nginx服务器通过proxy_pass指令将客户端的请求地址重写为被代理服务器的地址,那么Nginx服务器返回给客户端的响应头中“Location”头域1

该指令解决了这个问题,可以把代理服务器返回的地址信息更改为需要的地址信息。

ps:如何查看Location头域信息
在浏览器中打开控制台,查看请求返回302状态码的请求,可找到响应头字段为Location的信息

 

2.语法

语法:    结构1:proxy_redirect redirect replacement; 
         结构2:proxy_redirect off; 
         结构3:proxy_redirect default; 
         
默认值:	 proxy_redirect default; 

位置:	 http, server, location

■ redirect,匹配“Location”头域值的字符串,支持变量的使用和正则表达式。
■ replacement,用于替换redirect变量内容的字符串,支持变量的使用。
该指令的用法我们通过几个配置实例来解释。
 

3.配置实例

对于第1个结构,假设被代理服务器返回的响应头中“Location”头域为:

Location: http://localhost:8081/proxy/some/uri/

该指令设置为:

proxy_redirect http://localhost:8081/proxy/ http://myweb/frontend/;

Nginx服务器会将“Location”头域信息更改为:

Location: http://myweb/frontend//some/uri/

这样,客户端收到的响应信息头部中的“Location”头域也就被更改了。

 
结构2使用default,代表使用location块的uri变量作为replacement,并使用proxy_pass变量作为redirect。请看下面两段配置,它们的配置效果是等同的。

#配置1
location /server/ {
	proxy_pass http://proxyserver/source/;
	proxy_redirect default;
}
#配置2
location /server/ {
	proxy_pass http://proxyserver/source/;
	proxy_redirect http://proxyserver/source/ /server/;
}

 
使用结构3可以将当前作用域所有的proxy_redirect指令配置全部设置为无效。

4.更多高级写法 参考nginx官方文档

服务器名称可以在替换字符串中省略,然后将插入主服务器的名称和端口(如果与 80 不同):

proxy_redirect http://localhost:8000/two/ /;

replacement 也可以包含变量:

proxy_redirect http://localhost:8000/ http://$host:$server_port/;

redirect 也可以包含变量:

proxy_redirect http://$proxy_host:8000/ /;

可以使用正则表达式指定指令。在这种情况下,重定向应该以"~"符号开头以进行区分大小写的匹配,或者以“~*”符号开头以进行不区分大小写的匹配。正则表达式可以包含命名和位置捕获,替换可以引用它们:

proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$      http://$1.example.com/$2;

可以在同一级别指定多个 proxy_redirect 指令:

proxy_redirect default;
proxy_redirect http://localhost:8000/  /;
proxy_redirect http://www.example.com/ /;

使用此指令,还可以将主机名添加到代理服务器发出的相对重定向中:

proxy_redirect / /;

 
 


  1. 如何查看Location头域信息
    在浏览器中打开控制台,查看请求返回302状态码的请求,可找到响应头字段为Location的信息 ↩︎