目录
- 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 / /;
- 如何查看Location头域信息?
在浏览器中打开控制台,查看请求返回302状态码的请求,可找到响应头字段为Location的信息 ↩︎