Nginxの特定のサーバーにユーザーセッションを割り当てる最も簡単な方法は、 ip-hashメソッドを使用することです。
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; }
この方法を使用すると、要求はクライアントIPアドレスに基づいてサーバーに配信されます。 クライアントIPv4アドレスの最初の3オクテットまたはクライアントIPv6アドレス全体が、ハッシュのキーとして使用されます。 このメソッドは、同じクライアントからのリクエストが常に同じサーバーに送信されるようにします。 このサーバーが利用できないと見なされた場合、このクライアントからのリクエストは別のサーバーに転送されます。 その不利な点は、バランシング方式にあります。クライアントが動的IPを使用する場合のセッションサポートの問題。 たとえば、多数の要求が単一のプロキシサーバーを通過する場合の不均衡なバランス。 Cookieを使用すると、これらの問題が解決します。
Nginxには、Cookieを使用してバランスを取るスティッキーメソッドがありますが、商用バージョンのみです。 より自由な方法があります-外部モジュールの使用。
Nginx-sticky-module
モジュールはCookieを作成し(これにより各ブラウザーが一意になります)、それを使用してリクエストを同じサーバーにリダイレクトします。 たとえば、最初の要求でCookieが存在しない場合、サーバーはランダムに選択されます。 プロジェクトは分岐され、元のバージョンはサポートされなくなりました。サポートされているブランチはnginx-sticky-module-ngと呼ばれ、 ここにあります 。 両方のリンクは Googleリクエスト「スティッキーセッションnginx」がリストの最初にある場合、公式のnginx Webサイトへのリンクの後、リンクは元のプロジェクトWebサイトへです。 そして、私のように、大文字と太字で書かれた微妙なサブタイトルに注意を払わなかった場合:サポートされているバージョンへのリンクの非推奨以下-モジュールをインストールする前に、ソースコードにいくつかの変更を加える必要があります。 実際には、 バージョンnginx 1.5.8以降、ngx_sock_ntop()メソッドのnginxのAPIが変更されたため、nginx-sticky-moduleアーカイブのngx_http_sticky_misc.cファイルでは、次の行
digest->len = ngx_sock_ntop(in, digest->data, len, 1);
に置き換える価値がある
digest->len = ngx_sock_ntop(in, sizeof(struct sockaddr_in), digest->data, len, 1);
このモジュールをインストールするには、このモジュールでNginxをコンパイルする必要があります。 これを行うには 、そうでない場合、C / C ++コンパイラとnginxが使用するライブラリ(RedHat / CentOS用)をインストールします:
yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel
Nginxソースの最新バージョンをダウンロードし、届きにくい場所に解凍し、解凍されたフォルダー内のsrcフォルダーを見つけ、nginx-sticky-moduleまたはnginx-sticky-module-ngアーカイブを解凍して、必要なnginxオプションを決定し、コンパイルします
./configure --other-install-options --add-module=/path/to/name-of-folder-with-nginx-sticky-module make && make install
init.dスクリプトはここにあり、ファイルにコピーする必要があります。
vi /etc/init.d/nginx
そして彼にスタートアップの権利を与えます
chmod a+x /etc/init.d/nginx
その後、サービスコマンドを使用して、再起動後の自動起動を構成できます。
# nginx service nginx start # nginx chkconfig nginx on
スティッキーセッションの設定は、ip_hashメソッドの場合ほど複雑ではありません。
upstream backend { sticky; server backend1.example.com; server backend2.example.com; }
デフォルトでは、名前がrouteでライフタイムが1時間のCookieが作成されます。 メソッドはいくつかの引数を取ることができ、それらはモジュールサイトで見つけることができます。
倒錯のファンのために、サードパーティのモジュールなしで行う場合、 ここに提示されているスティッキーセッション設定を使用できます。
PS:追加、コメント、発言、願い、苦情、別れの言葉は大歓迎です。