Nginxプロキシを使用したスティッキーセッション


10

2つの異なるAWSインスタンスで実行されているアプリケーションがあり、IPに基づいて「スティッキー」または「永続的」セッションを有効にして、特定の方法でWebソケットテクノロジーを利用できるようにしたいと考えています。

ip_hashこれらのスティッキーセッションを有効にするために使用する2つの異なるセットアップがあります。

最初のセットアップでは、アプリプロセスはNginx構成と同じインスタンスで実行されています。これは機能しており、セッションは期待どおりに持続します。

upstream my_app {
    ip_hash;
    # local servers
    server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
    server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

2番目のセットアップでは、外部インスタンスをポイントして、同じ効果を達成しようとしています。この設定は機能していません。つまり、セッションはまだ負荷分散されています。

upstream my_app {
    ip_hash;
    # external servers
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

私はip_hash正しく使用していますか?外部サーバーに対して「スティッキー」なIPベースのセッションを有効にするにはどうすればよいですか?


Nginxに「ngx_http_upstream_module」がインストールされていますか?デフォルトで含まれているかどうかはわかりません。「nginx -V」は通常、それが組み込まれたモジュールを出力します。鉱山(ソースから作成)は言及していません
Tim

回答:


7

私のサーバーはAWSロードバランシングの背後にあったため、常にクライアントIPを反映するように、正しいヘッダーをアップストリームに渡す必要がありました。次の構成で問題が解決しました(コメント行を参照):

upstream my_app {
    ip_hash;
    server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
    server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
    keepalive 8;
}

server {
    server_name my-app.com;

    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        # This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;

        proxy_pass http://my_app/;
        proxy_redirect off;
    }
}

7

Nginxのドキュメントによると、スティッキーセッションのサポートは、高価なPlusバージョンでのみ利用できます。私は代替案を研究していて、近いうちにNginx 1.5+と互換性のないこの古いフォークがありますhttps://github.com/lusis/nginx-sticky-module

私もLUAモジュールを構築しようとしましたが、列挙とブロッキングのためだけに、ピア選択のためのAPIフックがありません。

Nginx Plusロードバランシング

更新

私は別の素晴らしいモジュールを見つけました、https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/srcを参照してください


このドキュメントにリンクできますか?
ジェームズShewey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.