本当にわからない...
Cookieを使用するのではなくURLにセッションIDを格納するJava Webアプリケーションがあります。2つのTomcatサーバーでアプリケーションを実行し、負荷分散のためにApacheサーバーを前面に配置したいと思います。
__ Tomcat1
Apache ----/
\__ Tomcat2
Tomcat Tomcat1
ファイルでjvmRoute
をserver.xml
に設定すると、URLはhttp://url;jsessionid=id.Tomcat1
になります。したがって、URLを確認してセッションのスティッキー性を実現し、対応するサーバーにルーティングすることができます。
mod_proxy
とmod_jk
が負荷分散を行うことは知っていますが、それらのスティッキーセッションは、セッションIDがCookieに保存されている場合にのみ機能します。私の場合、セッションIDはURLにエンコードされています。どうすれば負荷分散を行うことができますか?
設定が間違っている可能性があります。ドキュメントは指定されていません。Cookieのみを機能させるスティッキーセッション。
stickysession-バランサーのスティッキーセッション名。値は通常、JSESSIONIDやPHPSESSIONIDなどに設定され、セッションをサポートするバックエンドアプリケーションサーバーによって異なります。バックエンドアプリケーションサーバーがCookieに異なる名前を使用し、URLエンコードされたID(サーブレットコンテナなど)を使用する場合は、|を使用します。それらを分離するために。最初の部分はCookie用で、2番目の部分はパス用です。
したがって、以下のようにセッションIDを指定できます。
ProxyPass / balancer://mycluster/ stickysession=|jsessionid
お役に立てれば。
スティッキーを作成するには、構成に次の行を追加する必要があります(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)