目次
Nginx には負荷分散機能があることは誰もが知っています. LAN 内の IP にアクセスするような純粋な ip_hash は IP チルトを引き起こします. cookie_hash サーバーはクライアントに cookie を発行します. 特定の cookie を含むリクエストはその発行者に割り当てられます. cookie には必要な情報が必要ですサーバーのサポート。
基本的な紹介
Sticky は、Cookie に基づいた負荷分散ソリューションです。Cookie に基づいてクライアントとバックエンド サーバー間のセッションを維持します。特定の条件下では、同じクライアントが同じバックエンド サーバーにアクセスすることを保証できます。リクエストが来ると、サーバーは Cookie を送信して、「次回はそれを持ってきて、直接私のところに来てください」と言います。
Sticky は nginx のモジュールです。Cookie に基づいた nginx 負荷分散ソリューションです。Cookie を配布して識別することで、同じクライアントのリクエストが同じサーバーに振り分けられます。デフォルトの識別名は Route です。
- 1. クライアントが初めてアクセス リクエストを開始し、それを受信した nginx はリクエスト ヘッダーに Cookie がないことを確認し、ポーリング方式でリクエストをバックエンド サーバーに配信します。
- 2. バックエンドサーバーはリクエストを処理した後、応答データを nginx に返します。
- 3. このとき、nginx はルート付きの Cookie を生成し、クライアントに返します。ルートの値はバックエンドサーバーに相当し、平文でもよいし、md5やsha1などのハッシュ値でもよい。
- 4. クライアントはリクエストを受信し、ルートとともに Cookie を保存します。
- 5. クライアントが次回リクエストを送信すると、ルートが取得され、nginx は受信した Cookie のルート値に基づいて、対応するバックエンド サーバーにそのルートを転送します。
ブラウザが Cookie をサポートしていない場合、sticky は有効にならず、モジュール全体が Cookie を使用して実装されます。
Stickyのインストール
ダウンロードリンク
- 1) ダウンロード後、サーバーに入れて解凍し、解凍場所を覚えておいてください。
- 2) nginx インストールファイルを入力します
- 3) nginxの設定
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--add -module= /tmp/sticky-module/nginx-goodies-nginx-sticky-module-ng
- 赤い部分は解凍後のパスに変更されています。
- 最後にNginxを再起動します
Make はコンパイル時にエラーを報告する場合があります。
変更: Sticky が解凍されたディレクトリを見つけて、変更したファイル vim ngx_http_sticky_misc.h を入力し、次のヘッダー ファイルを追加します。
#include <openssl/sha.h>
#include <openssl/md5.h>
nginxの開始停止再起動コマンド
/usr/local/nginx-1.9.9/sbin/nginx -s start
/usr/local/nginx1.9.9/sbin/nginx -s stop
/usr/local/nginx1.9.9/sbin/nginx -s reload
スティッキーを使用して設定する
upstream iphashserver {
sticky;
server www.test.com:8001;
server www.test.com:8002;
}
具体的には、次のようにパラメータを追加できます。
Sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] [hash=index|md5|sha1] [no_fallback] [secure] [httponly];
パラメータ情報の説明:
[name=route] セッションの記録に使用する Cookie 名を設定します [domain=.foo.bar] Cookie のドメイン名を設定します [path=/] Cookie の URL パス、デフォルトのルート ディレクトリを設定します [expires=1h] ] Cookie の存続期間を設定します。デフォルトでは設定されていません。ブラウザを閉じると無効になります。1 秒以上の値である必要があります。 [hash=index|md5|sha1] サーバー ID をサーバー ID に保存するかどうかを設定します 。 Cookie はプレーン テキストであるか、md5 値を使用します。デフォルトは md5 [no_fallback] です。この項目を設定すると、sticky のバックエンド マシンがハングアップすると、nginx は他のサーバーに転送する代わりに 502 (Bad Gateway or Proxy Error) を返します。これは推奨されません。セキュア Cookie を有効にするには、 [ secure] を設定します。Cookie を許可するには、HTTPS サポートが必要です [httponly]。JS を通じて漏洩せず、決して使用されません
ノート
- クライアントが同時に複数のリクエストを開始した場合、同じクライアントからのリクエストが異なるバックエンド サーバーに到達する可能性があります。これらのリクエストには Cookie が含まれないため、サーバーはバックエンド サーバーをランダムに選択し、異なる Cookie を返します。これらのリクエストの最後のものが返されると、クライアントの Cookie が安定し、値は返された最後に返された Cookie に基づきます。
- Cookieは最初にサーバーによって発行されるため、必ずしも有効になるわけではありません。クライアントがCookieを無効にすると、Cookieは有効になりません。
- クライアントは Cookie を持ち込むことはできません。Android クライアントがリクエストを送信するとき、通常、すべての Cookie が持ち込まれるわけではありません。どの Cookie が持ち込まれるかを明確に指定する必要があります。負荷分散に Sticky を使用したい場合は、Android 開発に Cookie を追加してください。
- Cookie 名は、ビジネスで使用される Cookie と同じ名前であってはなりません。Sticky のデフォルトの Cookie 名は Route ですが、これは任意の値に変更できます。
- クライアントによって送信される最初のリクエストには Cookie が含まれません。サーバーによって発行された Cookie は、クライアントの次のリクエストでのみ有効になります。
- Nginx スティッキー モジュールは ip_hash と同時に使用できません