Nginx でのスティッキー サードパーティ モジュールの使用の解釈

目次

基本的な紹介 

Stickyのインストール

スティッキーを使用して設定する

ノート


 

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のインストール

ダウンロードリンク

nginx-goodies / nginx-sticky-module-ng / ダウンロード — Bitbucket icon-default.png?t=N7T8https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/downloads/

  • 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 と同時に使用できません

おすすめ

転載: blog.csdn.net/m0_62436868/article/details/132844816