首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同URI修改的proxy_next_upstream

不同URI修改的proxy_next_upstream
EN

Stack Overflow用户
提问于 2019-01-23 16:17:01
回答 1查看 1.4K关注 0票数 2

如果主服务器返回404,则需要设置多个上游服务器,并使用proxy_next_upstream进行备份。但是,用于上游备份服务器的URI与面向主服务器的URI不同,因此我不知道这是否可行。

详细地说,下面的配置片段可以正常工作(如果URI与所有上游服务器相同):

上游-proj-a{服务器server1.test.com;服务器server2.test.com备份;}服务器{侦听80;侦听:80;server_name www.test.com;location /proj/proj-a { proxy_next_upstream错误超时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_pass不同的上游服务器结合proxy_next_upstream。

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-01-25 07:47:45

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

配置如下:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54331482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档