我使用nginx和NginxHttpUpstreamModule进行负载平衡。 我的configuration非常简单:
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; } }
但是使用这个configuration,当2个后端服务器中的一个closures时,nginx仍然将请求路由到它,并且导致超时一半的时间:(
有没有任何解决scheme,使nginx自动路由请求到另一台服务器,当它检测到一个closures的服务器。
谢谢。
我认为这是因为nginx没有检测到上游因为在同一台机器而closures。
您正在查找的选项是: proxy_next_upstream和proxy_connect_timeout 。
尝试这个:
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; }
嘿,请看wiki: http : //wiki.nginx.org/NginxHttpUpstreamModule#server
基本上,如果检测到故障,后端将被标记为closuresx秒,然后再次尝试。 所以如果你继续看到连接,那么nginx可能会继续检查后端是否可用。
但是,它应该尝试上游块中的下一个条目,所以如果只有一个后端可用,则不应该看到没有后端可用。