proxy_redirect

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

比如,Nginx服务器通过proxy_pass指令将客户端的请求地址重写为被代理服务器的地址,那么Nginx服务器返回给客户端的响应头中“Location”头域显示的地址就应该和客户端发起请求的地址相对应,而不是代理服务器直接返回的地址信息,否则就会出问题。该指令解决了这个问题,可以把代理服务器返回的地址信息更改为需要的地址信息。其语法结构为:

proxy_redirect redirect replacement;
proxy_redirect default;
proxy_redirect off;
  • redirect,匹配响应的“Location”头的字符串,支持变量的使用和正则表达式。

  • replacement,用于替换redirect变量内容的字符串,支持变量的使用。

对于第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/

结构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指令配置全部设置为无效。

Last updated