
リバース プロキシとして 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 を保持する必要がないため、より洗練されたセッション永続化方法です。すべての情報は、共有メモリ ゾーン内のサーバー側に保存されます。