我們有四個 Tomcat 透過 Apache mod_proxy (mod_ajp) 進行負載平衡。 mod_proxy 配置如下,lbmethod=byrequests 並啟用 Sticky_session。但有時我們會注意到 apache 不支援黏性會話。即 Apache 正在將 Tomcat 1 應該接收的請求傳送到 Tomcat 2,導致使用者失去身份驗證。 mod_proxy 是否始終尊重黏性會話,如果不是,在什麼情況下它將忽略黏性會話設定。
更新:
httpd.conf 中的代理程式配置
<Proxy balancer://app-lb>
BalancerMember ajp://10.**.**.**:5009/app min=1 max=300 route=r1 loadfactor=1 timeout=300 KeepAlive=On
BalancerMember ajp://10.**.**.**:5010/app min=1 max=300 route=r2 loadfactor=1 timeout=300 KeepAlive=On
BalancerMember ajp://10.**.**.**:5011/app min=1 max=300 route=r3 loadfactor=1 timeout=300 KeepAlive=On
BalancerMember ajp://10.**.**.**:5012/app min=1 max=300 route=r4 loadfactor=1 timeout=300 KeepAlive=On
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /app balancer://app-lb stickysession=JSESSIONID
server.xml 中的連接器配置
<Connector port="5011" protocol="org.apache.coyote.ajp.AjpNioProtocol" keepAliveTimeout="30000" connectionTimeout="30000" redirectPort="8443" maxPostSize="10485760"/>