nginx proxy_redirect 无效

proxy_redirect http://A/ http://B/
在浏览器中重定向的request url还是A,并没有变成B

谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你看下这篇博客吧, 应该有用👉 :nginx proxy_redirect实现服务端重定向
  • 除此之外, 这篇博客: Nginx笔记——代理服务配置中的 16. proxy_redirect 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

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

    proxy_redirect redirect replacement;
    proxy_redirect default;
    proxy_redirect off;
    
    • redirect,匹配Locarion消息头的字符串,支持变量的使用和正则表达式。
    • replacement,用于替换redirect变量内容的字符串,支持变量的使用。
    1. 结构1,假设被代理服务器返回的啊应头中Location消息头为:
      Location: http://192.168.xx.xx:8080/proxy/
      该指令设置为:
    server {
           listen       80;
           server_name www.mydomain.com;
           location /proxy/ {
                proxy_pass http://192.168.xx.xx:8080;
                proxy_redirect http://192.168.xx.xx:8080/proxy/ http://www.mydomain.com/proxy/;
                #或者使用/proxy/,这样就使用服务器的基本名称和端口,即使它来自非80端口
                #proxy_redirect http://192.168.xx.xx:8080/proxy/ /proxy/;
           }
    }
    

    Nginx 服务器会将Location消息头的信息更改为:
    Location:http://www.mydomain.com/proxy/

    1. 结构2使用default,代表使用location块的uri变量作为replacement,并使用proxy_pass 变量作为 redirect。下面两段配置,它们的配置效果是等同的,都会Location消息头的信息更改为:
      Location:http://www.mydomain.com/one/
    #配置1
    location /one/ {
                proxy_pass http://www.mydomain.com:8080/two/; 
                proxy_redirect default;
    }
    #配置2
    location /one/ {
         proxy_pass http://www.mydomain.com:8080/two/;
         proxy_redirect http://www.mydomain.com/two/ /one/; 
    }
    
    1. 结构3可以将当前作用城下所有的proxy_redirect指令配置全部设置为无效。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^