ロードバランシングに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つのバックエンドサーバーの1つがダウンしても、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です。
ただし、上流ブロックの次のエントリを試す必要があるため、1つだけがダウンしている場合に使用可能なバックエンドがないことは実際にはわかりません。