nginx チュートリアル)
sticky モジュールと Ip_hash は両方とも負荷分散アルゴリズムに関連していますが、相違点があります。違いは次のとおりです: 1. IP ハッシュ、クライアントの IP に基づいてリクエストをさまざまなサーバーに割り当てます 2. スティッキー、サーバーによってクライアントに与えられる Cookie、クライアントが再度リクエストすると、この Cookie が取得され、nginx はこの Cookie を含むリクエストを Cookie を発行したサーバーに転送します。注: コンピューターは 3 台あります。 LAN 内にあり、イントラネット IP は 3 つありますが、リクエストを開始すると、外部 IP は 1 つだけであり、通信事業者によって接続先のルーターに割り当てられます。ip_hash メソッドが使用される場合、Nginx はスティッキー モジュールが使用されている場合、次のことを達成するために Cookie を使用してリクエストをサーバーに分散します: イントラネット NAT ユーザーのバランス。これは iphash ではできないことです。Sticky は機能します:Sticky は Cookie に基づいた負荷分散ソリューションです。Cookie を配布して識別することにより、同じクライアントからのリクエストが同じサーバー上に分類されます。デフォルトの Cookie 識別名は、ルート: 1 です。クライアントが初めてアクセス リクエストを開始します。nginx がそれを受信すると、リクエスト ヘッダーに Cookie がないことがわかり、リクエストをポーリング方式でバックエンドサーバーに接続します。 2. バックエンド サーバーはリクエストを処理した後、応答データを nginx に返します。 3. このとき、nginx はルート付きの Cookie を生成し、クライアントに返します。 Route の値はバックエンド サーバーに対応し、プレーン テキストまたは md5 や sha1 などのハッシュ値にすることができます 4. クライアントはリクエストを受信し、ルートとともに Cookie を保存します。 5. クライアントが次回リクエストを送信するとき、ルートが取得され、nginx は受信した Cookie のルート値に基づいて、対応するバックエンド サーバーにそのルートを転送します。 Sticky公式サイトアドレス公式アドレス:https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/srcダウンロードアドレス:
wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gzNginxのインストール Stickyモジュール
#1.下载的文件上传,解压 tar -xvzf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar #2.重命名为nginx-sticky-module mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 /usr/local/nginx-sticky-module #3.进入nginx源码目录进行编译 ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module --with-http_stub_status_module --with-http_ssl_module #4.安装 1.停止nginx后进行安装:make && make install 2.在线更新安装: make upgradeインストールは完了したら、./sbin/nginx -V でコンパイル パラメータを確認します。スティッキー モジュールが nginx
[root@bogon nginx]# ./sbin/nginx -V nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_moduleにコンパイルされていることがわかります。nginx.conf を変更し、スティッキー関数
upstream zyi { #使用sticky,不设置expires则浏览器关闭时结束会话 sticky domain=zy.csxiuneng.com path=/; server localhost:9001; } server { listen 80; server_name zy.csxiuneng.com; access_log logs/zy.access.log main; location / { proxy_pass http://zyi; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; client_max_body_size 10m; client_body_buffer_size 256k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; }を有効にします。 Sticky 構文:
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的生存期,默认不设置,浏览器关闭即失效 [hash=index|md5|sha1] 设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5 [no_fallback] 设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置 [secure] 设置启用安全的cookie,需要HTTPS支持 [httponly] 允许cookie不通过JS泄漏,没用过Nginx を再起動します: ./sbin/nginx -s reloadアクセス: zy.csxiuneng.com、Cookie の 1 つが Route
## であることがわかります。
#注:
1. 同じクライアントが起動時に複数のリクエストを同時に開始すると、異なるバックエンド サーバーに転送される可能性があります
2。 Cookie は最初にサーバーによって配置されます。クライアントが Cookie を無効にすると、Cookie は有効になりません。3. クライアントは Cookie を持ち込まない可能性があります。Android クライアントがリクエストを送信するとき、通常、すべての Cookie が持ち込まれるわけではありません。どの Cookie が持ち込まれるかを明確に指定する必要があります。負荷分散に Sticky を使用したい場合は、Android 開発に Cookie を追加してください。
4. Cookie 名は、ビジネスで使用される Cookie と同じ名前であってはなりません。 Sticky のデフォルトの Cookie 名は、route ですが、任意の値に変更できます (##5)。クライアントによって送信される最初のリクエストには Cookie が含まれません。サーバーによって発行された Cookie は、クライアントの次のリクエストでのみ有効になります。
6.Nginx スティッキー モジュールは ip_hash と同時に使用できません
複数のサードパーティ モジュールを追加する場合は、複数の --add-module 命令を使用します:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module/ --add-module=/usr/local/nginx-http-concat-1.2.2/
以上がnginx はサードパーティのモジュールを追加しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。