Nginx
nginx 自動故障轉移負載均衡
我正在使用 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; } }
但是使用此配置,當 2 個後端伺服器之一關閉時,nginx 仍將請求路由到它,並導致一半時間超時:(
是否有任何解決方案可以讓 nginx 在檢測到伺服器停機時自動將請求路由到另一台伺服器。
謝謝你。
我認為這是因為 nginx 沒有檢測到上游已關閉,因為它在同一台機器上。
您正在尋找的選項是: 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
基本上,如果檢測到失敗,後端將被標記為關閉 x 秒,然後再試一次。因此,如果您不斷看到連接,則可能是 nginx 不斷檢查後端是否可用。
但是,它應該嘗試 upstream 塊中的下一個條目,因此如果只有一個關閉,您實際上不應該看到沒有可用的後端。