【发布时间】:2023-03-05 18:56:01
【问题描述】:
我们需要设置多个上游服务器,如果主服务器返回404,则使用proxy_next_upstream作为备份。但是上游备份服务器的URI与主服务器的URI不同,所以我不知道这是否可能。
详细来说,下面的配置 sn-p 工作正常(如果所有上游服务器的 URI 都相同):
upstream upstream-proj-a { server server1.test.com; server server2.test.com backup; } server { listen 80; listen [::]:80; server_name www.test.com; location /proj/proj-a { proxy_next_upstream error timeout http_404; proxy_pass http://upstream-proj-a/lib/proj/proj-a; }
对于http://test.com/proj/proj-a/file的请求,会先尝试请求http://server1.test.com/lib/proj/proj-a/file,如果返回404或者超时,再尝试http://server2.test.com/lib/proj/proj-a/file。这很好。
但是,现在对于 server2,它只能接受像 http://server2.test.com/lib/proj/proj-a-internal/file 这样的 URL,这与指向主服务器的 URI 不同。如果只考虑备份服务器,我可以这样写:
proxy_pass http://server2.test.com/lib/proj/proj-a-internal
但是,对于结合 proxy_next_upstream 的不同上游服务器,我似乎不能有不同的 proxy_pass。
我怎样才能做到这一点?
【问题讨论】:
-
看来使用Lua脚本可以达到目的。由于没有任何答案,因此可以自己更新答案...
标签: nginx nginx-reverse-proxy nginx-config