【问题标题】:Nginx proxy_next_upstream with different URI modificationURI修改不同的Nginx proxy_next_upstream
【发布时间】: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


【解决方案1】:

我找到了一种使用简单proxy_pass的解决方法,并将本地主机设置为备份上游服务器,然后代表真正的备份上游服务器进行重写。

配置如下:

upstream upstream-proj-a {

   server server1.test.com:9991;
   # Use localhost as backup
   server localhost backup;
}

server {
    listen 80;
    listen [::]:80;

    resolver 127.0.1.1;

    server_name www.test.com;

    location /lib/proj/proj-a {
        # Do rewrite then proxy_pass to real upstream server
        rewrite /lib/proj/proj-a/(.*) /lib/proj/proj-a-internal/$1 break;
        proxy_pass http://server2.test.com:9992;
    }

    location /proj/proj-a {
        proxy_next_upstream error timeout http_404;
        proxy_pass http://upstream-proj-a/lib/proj/proj-a;
    }
}

它工作正常,但唯一的副作用是,当请求需要转到备份服务器时,它会创建另一个从 localhost 到 localhost 的新 HTTP 请求,这似乎使 nginx 的负载加倍。目标是传输相当大的文件,我不确定这是否会影响性能,特别是如果所有协议都是 https 而不是 http。

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 2017-08-16
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多