nginx proxy_redirect 不重写位置 header 作为响应

nginx proxy_redirect does not rewrite location header in response

我有一个简单的问题

我已经做到了

upstream hisservers {
ip_hash;
server A;
server B;
server C;
server D;
server E;
server F; }

server {
listen 80;
server_name test.server;
location / {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://hisservers;
} }

但问题是...以上解决方案不会重写位置 header 作为响应...所以我总是会重定向到这 6 个上游中的任何一个

然后我做了这个

proxy_redirect http://hisservers /;

还是不行 最后我做到了

proxy_redirect http://A/ /;
proxy_redirect http://B/ /;
proxy_redirect http://C/ /;
proxy_redirect http://D/ /;
proxy_redirect http://E/ /;
proxy_redirect http://F/ /;

而且有效..

我以为nginx默认会匹配上游并重写位置header..

关于这方面的任何提示..

我认为我的解决方案很老套

您的每个服务器 return 在它们的位置响应中有不同的主机名 headers,因此您的 proxy_redirect 声明必须与这些主机名匹配。

您可以使用单独的 proxy_redirect 语句匹配每个主机名,正如您在问题末尾所展示的那样。

或者,proxy_redirect 允许您使用正则表达式。有关详细信息,请参阅 this document

例如:

proxy_redirect ~*http://[^/]+(/.*)$ ;

上面的陈述应该可以替代问题末尾的六个陈述。 [^/]+ 表达式匹配任何主机名,(/.*)$ 表达式捕获要在替换中使用的 URI。