与Apache Web服务器和Tomcat服务器的粘性会话问题如何处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (226)

我使用apache web服务器作为apache后面的两个tomcat实例的负载平衡器。当第一个请求到达节点A并且来自同一客户端的第二个请求到达节点B时,我无法访问节点A中的会话变量。很明显。我在互联网上冲浪,发现启用粘性会话会有所帮助。但是,在Apache中启用粘性会话的所有教程看起来都很混乱。有没有简单的分步教程?请帮忙。

来自评论的代码片段:

ProxyPass /balancer-manager ! 
ProxyPass /balancer://mycluster/ stickysession=JSESSIONID 
ProxyPassReverse /balancer://mycluster/ 
<Proxy balancer://mycluster>; 
  BalancerMember ajp://localhost:9001/ route=NodeA1000 retry=10 
  BalancerMember ajp://localhost:9002/ route=NodeB1000 retry=10 
</Proxy> 
提问于
用户回答回答于

对于Apache httpd来保持你的会话绑定到相同的后端,它需要知道哪个cookie保留了会话ID。对于java,这是(通常)JSESSIONID

如果正在使用该ProxyPass指令,请使用

ProxyPass /example http://backend.example.com stickysession=JSESSIONID

Apachehttpd文档

用户回答回答于

这对我有效...

代替在ProxyPass指令中使用stickysession = JSESSIONID,它必须在使用ProxySet的平衡器配置中设置stickysession = JSESSIONID:

<Proxy balancer://mybalancer>
BalancerMember ajp://server1:8009 route=tomcat1
BalancerMember ajp://server2:8009 route=tomcat2
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /myapp/ mybalancer://myapp/

当我在ProxyPass中使用它时,它不适用于我,如下所示:

ProxyPass /myapp/ mybalancer://myapp/ stickysession=JSESSIONID

这应该添加到Apache文档中,因为这是一个很难解决的问题。

扫码关注云+社区

领取腾讯云代金券