Nginx

nginx 自動故障轉移負載均衡

  • June 27, 2018

我正在使用 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_upstreamproxy_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 塊中的下一個條目,因此如果只有一個關閉,您實際上不應該看到沒有可用的後端。

引用自:https://serverfault.com/questions/140990