NGINX上游服务器按顺序排列

时间:2017-05-16 19:40:33

标签: nginx proxy backup fallback

我有一个NGINX代理,后面有4个上游服务器,2个本地服务器,2个远程服务器,这是为了保持最大的容错能力。 现在我可以按照这样的方式尝试每个服务器

upstream backend {
    server server1;
    server 127.0.0.1:8081 backup;
}

upstream fallback1 {
    server server2;
    server 127.0.0.1:8082 backup;
}

upstream fallback2 {
    server server3;
    server server4 backup;
}

server {
    listen 127.0.0.1:80;
    location / {
        proxy_pass http://backend;
        proxy_next_upstream invalid_header http_500 http_502 http_504 http_403;
    }
}

server {
    listen 127.0.0.1:8081;
    location / {
        proxy_pass http://fallback1;
        proxy_next_upstream invalid_header http_500 http_502 http_504 http_403;
    }
}

server {
    listen 127.0.0.1:8082;
    location / {
        proxy_pass http://fallback2;
        proxy_next_upstream invalid_header http_500 http_502 http_504 http_403;
    }
}

有没有更好的方法来实现这一目标?至于到达远程服务器,我第三次循环回服务器感觉不对。

我希望nginx避免使用远程服务器,如果本地的服务器有数据,因为这会产生费用。

如果服务器响应,我也不介意100%的请求都转到一台服务器上。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我建议您将备份和主文件合并到一个单一的合并条目中 - 此外,为了加快后续请求,您可以查看 keepalive。这将防止额外的 TCP 握手开销。

upstream backend {
    server server1;
    server server2;
    server server3 backup;
    server server4 backup;
    keepalive 25;
}


server {
    listen 127.0.0.1:80;
    location / {
        proxy_set_header Connection "";
        proxy_http_version 1.1; 
        proxy_pass http://backend;
        proxy_next_upstream invalid_header http_500 http_502 http_504 http_403;
    }
}

在上面的配置中,前两个服务器将在循环配置中尝试,然后将尝试备份服务器。

我还将探索 max_fails and fail_timeout,它可以附加到上游服务器以处理上游列表中的故障。 Proxy_next_upstream 也可以配置为根据“timeout”条件移动到下一个上游。

有关 keepalive 的更多信息 in NGINX documentation