Nginx Upstream設定

Nginxのupstreamブロックでバックエンドサーバーグループを定義する方法を解説。keepalive接続、重み付けサーバー、ハッシュベースルーティング、フェイルオーバー設定に対応。

Proxy

詳細な説明

Nginxのupstreamブロックは、proxy_passfastcgi_pass、その他のプロキシディレクティブから参照できる名前付きバックエンドサーバーグループを定義します。ロードバランシングと高可用性設定の基盤となります。

基本的なUpstream定義

upstream api_servers {
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
    server 10.0.1.12:8080;
}

server {
    location /api/ {
        proxy_pass http://api_servers;
    }
}

サーバーパラメータ

upstreamブロック内の各サーバーエントリは、トラフィック分散とヘルス検知を細かく制御するための複数のパラメータをサポートします:

upstream backend {
    server 10.0.1.10:8080 weight=5;
    server 10.0.1.11:8080 max_fails=3 fail_timeout=30s;
    server 10.0.1.12:8080 backup;
    server 10.0.1.13:8080 down;
}
  • weight:異なる処理能力を持つサーバー間のトラフィック分散比率を制御。
  • max_fails / fail_timeoutfail_timeout 秒以内に max_fails 回連続で失敗すると、そのサーバーは fail_timeout 期間の残りの間利用不可となり、その後リトライされる。
  • backup:グループ内のすべての非backupサーバーが利用不可の場合にのみトラフィックを受信。
  • down:サーバーを永久に利用不可としてマーク。計画メンテナンス時に有用。

Keepalive接続

プロキシリクエストごとに新しいTCP接続を確立すると計測可能な遅延が発生します。keepalive ディレクティブはアップストリームサーバーへのアイドルな永続接続のプールを維持します:

upstream backend {
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
    keepalive 32;
}

location / {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
}

proxy_http_version 1.1 の設定と Connection ヘッダーのクリアは、アップストリームサーバーとのkeepalive接続を正しく機能させるために両方とも必要です。

ハッシュベースルーティング

hash ディレクティブでリクエスト属性に基づく一貫したルーティングを行い、同じリクエストキーが常に同じバックエンドサーバーに到達するようにします:

upstream backend {
    hash $request_uri consistent;
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
}

consistent パラメータはコンシステントハッシュリングアルゴリズムを実装し、サーバーの追加・削除時のキー再分配を最小化します。キャッシュ効率の維持に重要です。

スロースタート

slow_start パラメータは、障害から回復したサーバーへのトラフィックを徐々に増加させ、キャッシュやコネクションプールがウォームアップされる前にフルトラフィックで即座に圧倒されるのを防ぎます。

ユースケース

バックエンドアプリケーションサーバーのプールを管理し、Nginxがどのようにトラフィックを分散し、障害を処理し、永続接続を維持するかを細かく制御する必要があります。

Try It — Nginx Config Generator

フルツールを開く