我有一个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%的请求都转到一台服务器上。
提前感谢您的帮助!
答案 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