我使用 nginx 和 NginxHttpUpstreamModule 进行负载平衡。我的配置非常简单:
upstream lb {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 89;
server_name localhost;
location / {
proxy_pass http://lb;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
但是使用此配置,当两个后端服务器中的一个宕机时,nginx 仍然会将请求路由到它,并且有一半的时间会导致超时 :(
有没有什么解决方案可以让 nginx 在检测到服务器宕机时自动将请求路由到另一台服务器。
谢谢。
答案1
我认为这是因为 nginx 没有检测到上游已关闭,因为它们位于同一台机器上。
您正在寻找的选项是: proxy_next_upstream和 代理连接超时。
尝试这个:
location / {
proxy_pass http://lb;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
答案2
嘿,请看维基百科:http://wiki.nginx.org/NginxHttpUpstreamModule#server
基本上,如果检测到故障,后端将被标记为关闭 x 秒,然后它会重试。因此,如果您继续看到连接,则可能是 nginx 一直在检查后端是否可用。
但是,它应该尝试上游块中的下一个条目,因此如果只有一个后端关闭,您实际上不应该看到没有可用的后端。