nginxのタイムアウトの設置の確認

nginxのロードバランサに割り当てたバックエンドのサーバがダウンしていることは、タイムアウトで判定される。タイムアウトする時間は以下のパラメータで調整できる。

長く設定すると、タイムアウトの検出が遅れるが、短く設定すると誤検知が増える。

仮にタイムアウトが誤検知されると、最初のバックエンドにも、次のバックエンドにもPOSTが送信され、複数のサーバで同じリクエストを多重に処理してしまうことがある。そのため、バックエンドは、誤検知を避けるより、同じPOSTを複数受けても状態が変わらないように設計しておく必要がある。

タイムアウトの処理は、fail_timeoutで指定した時間内にmax_failsの回数だけタイムアウトすると、fail_timeoutで指定した時間のあいだ、そのサーバにはアクセスしないようになる。

適当に設定ファイルを書くと以下のような形になる。

    upstream backend {
        server express1:3000 max_fails=1 fail_timeout=60s;
        server express2:3000 max_fails=1 fail_timeout=60s;
        server express3:3000 max_fails=1 fail_timeout=60s;
    }

    server {
        listen 80 default_server;

        location / {
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

            proxy_pass http://backend;
        }
    }

これでnginxを使ってバックエンドサーバの冗長化構成を組むことができる。 ただし、nginx自体の冗長化については別途検討が必要である。