会话 id 在 url 中时的 Apache 负载平衡

KK *_* Lo 5 load-balancing mod-proxy mod-jk apache-2.2

我真的不知道...

我有一个 java web 应用程序,它将会话 id 存储在 URL 中,而不是使用 cookie。我想在 2 个 tomcat 服务器上运行该应用程序,并在它们前面使用 Apache 服务器进行负载平衡。


            __ tomcat1
Apache ----/
           \__ tomcat2
Run Code Online (Sandbox Code Playgroud)

通过在Tomcat文件中设置jvmRouteto ,url就会变成. 所以可以通过查看url来实现会话粘性,并将其路由到相应的服务器。tomcat1server.xmlhttp://url;jsessionid=id.tomcat1

我知道,mod_proxymod_jk做负载均衡,但他们的粘性会话只有工作当会话ID存储在cookie中。就我而言,会话 ID 编码在 URL 中。如何进行负载平衡?

小智 4

也许你的配置是错误的。文档中没有指定粘性会话仅适用于 cookie。

StickySession - 平衡器粘性会话名称。该值通常设置为 JSESSIONID 或 PHPSESSIONID 之类的值,这取决于支持会话的后端应用程序服务器。如果后端应用程序服务器对 cookie 和 url 编码的 id 使用不同的名称(如 servlet 容器),请使用 | 来将它们分开。第一部分用于 cookie,第二部分用于路径。

所以你可以像下面这样指定sessionid。

ProxyPass / balancer://mycluster/ stickysession=|jsessionid
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。