Nginx リバース プロキシが同じリクエストを複数のバックエンド サーバーに送信する

Nginx リバース プロキシが同じリクエストを複数のバックエンド サーバーに送信する

リバース プロキシとして NGINX を、アップストリーム サーバーとして 2 つの Apache を使用しています。

example.com (NGINX に向けられた) にアクセスするたびに、両方の Apache サーバーが GET リクエストを受け取ります。NGINX はデフォルトでラウンドロビン方式に基づいて動作するため、奇妙に思えます。

私の設定は次のとおりです:-

upstream apache {
         server 172.18.0.164;
         server 172.18.8.18;
        }


location / {
       proxy_pass http://apache;
    }

Apache 1 マシンのログ:-

192.168.10.236 - - [2015/10/05:07:59:21 -0400] "GET / HTTP/1.0" 200

Apache 2 マシンのログ:-

172.18.8.97 - - [2015/10/05:11:59:27 +0000] 「GET /wordpress/ HTTP/1.0」

答え1

直接Nginx 管理者ガイド:


セッション持続性の有効化

NGINX Plusは3つのセッション持続方法をサポートしています。これらの方法は、粘着性指令。

スティッキークッキー方法。この方法では、NGINX Plus はアップストリーム グループからの最初の応答にセッション クッキーを追加し、応答を送信したサーバーを識別します。クライアントが次のリクエストを発行すると、クッキー値が含まれ、NGINX Plus は同じアップストリーム サーバーにリクエストをルーティングします。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;

  sticky cookie srv_id expires=1h domain=.example.com path=/;
}

この例では、srv_idパラメータは設定または検査される Cookie の名前を設定します。オプションのexpiresパラメータは、ブラウザが Cookie を保持する時間を設定します。オプションのdomainパラメータは、Cookie が設定されるドメインを定義します。オプションのpathパラメータは、Cookie が設定されるパスを定義します。これは、最も単純なセッション永続化方法です。

スティッキールートこの方法では、NGINX Plusは最初のリクエストを受け取ったときにクライアントに「ルート」を割り当てます。その後のすべてのリクエストは、ルートパラメータのサーバリクエストがプロキシされるサーバーを識別するためのディレクティブ。ルート情報は、Cookie または URI から取得されます。

upstream backend {
    server backend1.example.com route=a;
    server backend2.example.com route=b;

    sticky route $route_cookie $route_uri;
}

クッキーを学ぶ方法。この方法では、NGINX Plus はまずリクエストとレスポンスを検査してセッション識別子を見つけます。次に、NGINX Plus はどのアップストリーム サーバーがどのセッション識別子に対応するかを「学習」します。通常、これらの識別子は HTTP クッキーで渡されます。リクエストにすでに「学習済み」のセッション識別子が含まれている場合、NGINX Plus は対応するサーバーにリクエストを転送します。

upstream backend {
   server backend1.example.com;
   server backend2.example.com;

   sticky learn 
       create=$upstream_cookie_examplecookie
       lookup=$cookie_examplecookie
       zone=client_sessions:1m
       timeout=1h;
}

この例では、アップストリーム サーバーの 1 つが、応答に Cookie「EXAMPLECOOKIE」を設定してセッションを作成します。

必須パラメータは、create新しいセッションがどのように作成されるかを示す変数を指定します。この例では、アップストリーム サーバーから送信された Cookie「EXAMPLECOOKIE」から新しいセッションが作成されます。

必須パラメータは、lookup既存のセッションを検索する方法を指定します。この例では、クライアントから送信された Cookie「EXAMPLECOOKIE」で既存のセッションが検索されます。

必須パラメータはzone、スティッキー セッションに関するすべての情報が保存される共有メモリ ゾーンを指定します。この例では、ゾーンに名前が付けられclient_sessions、サイズは 1 メガバイトです。

これは、クライアント側で Cookie を保持する必要がないため、より洗練されたセッション永続化方法です。すべての情報は、共有メモリ ゾーン内のサーバー側に保存されます。

関連情報