web-dev-qa-db-ja.com

セッションIDがURLにある場合のApacheロードバランシング

本当にわからない...

Cookieを使用するのではなくURLにセッションIDを格納するJava Webアプリケーションがあります。2つのTomcatサーバーでアプリケーションを実行し、負荷分散のためにApacheサーバーを前面に配置したいと思います。


            __ Tomcat1
Apache ----/
           \__ Tomcat2

Tomcat Tomcat1ファイルでjvmRouteserver.xmlに設定すると、URLはhttp://url;jsessionid=id.Tomcat1になります。したがって、URLを確認してセッションのスティッキー性を実現し、対応するサーバーにルーティングすることができます。

mod_proxymod_jkが負荷分散を行うことは知っていますが、それらのスティッキーセッションは、セッションIDがCookieに保存されている場合にのみ機能します。私の場合、セッションIDはURLにエンコードされています。どうすれば負荷分散を行うことができますか?

5
KK Lo

設定が間違っている可能性があります。ドキュメントは指定されていません。Cookieのみを機能させるスティッキーセッション。

stickysession-バランサーのスティッキーセッション名。値は通常、JSESSIONIDやPHPSESSIONIDなどに設定され、セッションをサポートするバックエンドアプリケーションサーバーによって異なります。バックエンドアプリケーションサーバーがCookieに異なる名前を使用し、URLエンコードされたID(サーブレットコンテナなど)を使用する場合は、|を使用します。それらを分離するために。最初の部分はCookie用で、2番目の部分はパス用です。

したがって、以下のようにセッションIDを指定できます。

ProxyPass / balancer://mycluster/ stickysession=|jsessionid

お役に立てれば。

4
kdoya

スティッキーを作成するには、構成に次の行を追加する必要があります(mod_proxy)

Header add Set-Cookie "BALANCEID=hej.%{BALANCER_WORKER_ROUTE}e; path=/;" env=BALANCER_ROUTE_CHANGED

次に、設定でルート名を指定します

<Proxy balancer://mycluster>
    BalancerMember http://Tomcat sever1.ip:8080  route=AcZxv
    BalancerMember http://Tomcat server2.ip:8080 route=AcXxv
    lbmethod=byrequests stickysession=BALANCEID
</Proxy>

そして、これらのルート名をTomcatサーバーのcatalina.propertiesのtcserver.nodeに追加します

tcserver.node=AcZxv (Tomcat 1st server)
tcserver.node=AcXxv (Tomcat 2nd server)