nginx proxy_redirect指令 解决由代理服务器重定后向引起的404问题 解决通过同一个域名添加url区分多站点重定向跳转404问题

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的信息 ↩︎

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值