我有个简单的问题
我做过这件事
上游hisservers服务器{ ip_hash; 服务器A; 服务器B; 服务器C; 服务器D; 服务器E; 服务器F;} 服务器{ 听80; server_name test.server; 地点/{ proxy_set_header X转发-主机$host:$server_port; proxy_set_header X转发-服务器$host; proxy_set_header X-转发-为$proxy_add_x_forwarded_for; proxy_pass http://hisservers; }}
但问题是..。以上解决方案不重写reponse中的位置标头。所以我总是会重定向到这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将匹配上游流,并重新编写位置标头。
任何关于这个的建议..。
我觉得我的解决办法很麻烦
发布于 2021-12-09 09:02:10
每个服务器在其位置响应头中返回不同的主机名,因此您的proxy_redirect语句必须匹配这些主机名。
您可以使用单独的proxy_redirect语句匹配每个主机名,正如您在问题末尾演示的那样。
或者,proxy_redirect允许您使用正则表达式。详情请参见本文件。
例如:
proxy_redirect ~*http://[^/]+(/.*)$ $1;上述发言应取代你问题末尾的六项声明。[^/]+表达式与任何主机名匹配,(/.*)$表达式捕获替换中使用的URI。
https://stackoverflow.com/questions/70285943
复制相似问题