web-dev-qa-db-ja.com

stickysessionがApacheと2つのGlassfishインスタンスで正常に機能しない

2つのGlassfishインスタンスで実行される2つのアプリケーションがあり、次のようにsticky sessionを使用するようにApacheを構成します。

ProxyPass / balancer://Appcluster/ stickysession=JSESSIONID

ただし、これは100%正しく機能するわけではなく、クライアントがApp1からApp2に移行するときにインスタンスが変更されることがあります。

ナビゲーターでCookieを確認すると、次のように表示されます。

cookies of browser

web.xmlで次のような別の構成を見つけました:

<session-config>
    <session-timeout>
        30
    </session-timeout>
    <cookie-config>
        <path>/</path>
    </cookie-config>
</session-config>

したがって、このパスをこのようにすると、すべてが正常に機能しますが、この2つのアプリケーション間のすべてのナビゲーションに新しいコンテキストが作成されます。

ここで、Glassfishを構成し、App1をデフォルトのWebモジュールのように設定します。これは正常に機能し、コンテキストは同じで、サーバーは新しいCookieを作成しますこのような :

cookies of browser

しかし、NO Default Web Moduleに接続しようとすると、2つのインスタンスが使用されます。

クラスター環境で複数のアプリケーションを実行するためのApacheとGlassfishの正しい構成を提案できますか?

[〜#〜]編集[〜#〜]

私は何かを通知したので、クライアントがApp1からApp2、そしてVSに移行するとき、クライアントが次のような新しいCookieを作成するたびに:

+-------+----------------------------------------+
| APP   | Cookie                                 |
+-------+----------------------------------------+-----+
| app1  | b5a1cd4befdc306f6e569d835b5e.instance2 | New |              
+-------+----------------------------------------+-----+
| app2  | b6caf890638a506216d625f7c82b.instance2 | New |                                  
+-------+----------------------------------------+-----+
| app1  | b6d1870ad8f3d044cc768b31e810.instance2 | New |                                   
+-------+----------------------------------------+-----+
| app2  | b6d84bf7b2a6fc37e3c9ffaf701b.instance2 | New |
+-------+----------------------------------------+-----+
| app2  | b6d84bf7b2a6fc37e3c9ffaf701b.instance2 |Same | because i don't change the application
+-------+----------------------------------------+-----+    
  • なぜこれが毎回新しいクッキーを作成するのですか?
  • アプリケーションごとに修正して一意にする方法はありますか?
1
YCF_L

1週間の検索の後、ようやく解決策が見つかりました。

私は2つのものを使用します。1つは2つのアプリケーションで、もう1つはサーバーApacheで使用します。

したがって、アプリケーションでは、Cookieの名前をweb.xmlで定義する必要があります。

APP1

<session-config>
    <session-timeout>
        30
    </session-timeout>

    <cookie-config>
        <name>jsessionapp1</name>
        <path>/</path>
    </cookie-config>
</session-config>

APP2

<session-config>
    <session-timeout>
        30
    </session-timeout>

    <cookie-config>
        <name>jsessionapp2</name>
        <path>/</path>
    </cookie-config>
</session-config> 

そしてサーバーApacheでstickysessionの名前を/ etc/httpd/conf/httpd_proxy.confに修正します:

ProxyPass / balancer://Appcluster/ stickysession=jsessionapp1|jsessionapp2|jsessionappN

これよりも優れた解決策があるかどうかはわかりません。はいの場合は、喜んで知っています。

0
YCF_L