与apache web服务器和tomcat服务器的粘性会话

iha*_*obs 17 java apache tomcat

我使用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> 
Run Code Online (Sandbox Code Playgroud)

小智 17

这对我有用......

不要在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/
Run Code Online (Sandbox Code Playgroud)

不工作对我来说,当我使用它的ProxyPass如下图所示:

ProxyPass /myapp/ mybalancer://myapp/ stickysession=JSESSIONID
Run Code Online (Sandbox Code Playgroud)

这应该添加到apache文档中,因为解决这个问题很难.


Joe*_*ckx 11

对于apache httpd来保持您的会话绑定到相同的后端,它需要知道哪个cookie保留会话ID.对于java,这通常是JSESSIONID.

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

ProxyPass /example http://backend.example.com stickysession=JSESSIONID
Run Code Online (Sandbox Code Playgroud)

优秀的apache httpd文档中找到.


小智 6

请试试这个,我相信这对你有用.

步骤1:在httpd.conf中添加以下代码:

<Proxy balancer://mycluster>
BalancerMember http://<NODE1>/<APP>/  route=jvm1 
BalancerMember http://<NODE2>/<APP>/  route=jvm2
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>

ProxyPass /<APP>/ balancer://mycluster/ 
ProxyPassReverse /<APP>/ balancer://mycluster/
Run Code Online (Sandbox Code Playgroud)

步骤2:在server.conf中添加以下代码:

a) <NODE1>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">    
b) <NODE2>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
Run Code Online (Sandbox Code Playgroud)