Apache 负载均衡后出现SESSION丢失的情况处理

之前在配置负载均衡测试的时候,发现每次刷新JSESSIONID都会变化(即使请求全部分发到同一台服务器上),我的负载均衡配置如下:
<Proxy balancer://democluster>  
BalancerMember http://127.0.0.1:8080/demo1
BalancerMember http://127.0.0.1:8080/demo2 status=+H 
</Proxy>

而我是将访问 http://127.0.0.1/demo 的请求进行了转发:

ProxyPass /demo balancer://democluster 
ProxyPassReverse /demo balancer://democluster

问题就出在链接后面不一致的path上面了,导致COOKIES无法共享JSESSIONID
demo1服务器把SESSIONID放在在 /demo1 下面
demo2服务器把SESSIONID放在在 /demo2 下面
因此在访问demo的请求中,拿不到任何一个保存的在COOKIES里面的JSESSIONID,所以每次都会分配新的JSESSIONID

解决办法一:统一访问的path和分发的path,都用/demo:

<Proxy balancer://democluster>  
BalancerMember http://127.0.0.1:8080/demo
BalancerMember http://127.0.0.1:8081/demo status=+H 
</Proxy>

解决方法二:强制设置反向代理后存放COOKIES的path,使用

ProxyPassReverseCookieDomain locahost www.domain.cn #设置COOKIES的存放域名
ProxyPassReverseCookiePath /demo / #将demo反向代理后的COOKIE统一存放在根目录

配置到虚拟服务器中:

<VirtualHost 127.0.0.1:80>
    ServerAdmin [email protected]
    ServerName 127.0.0.1
    ProxyPreserveHost On
    ProxyRequests Off  
    ProxyPass /demo balancer://democluster 
    ProxyPassReverse /demo balancer://democluster
    ProxyPassReverseCookiePath /demo /
    ErrorLog "logs/test.localhost-error_log"
    CustomLog "logs/test.localhost-access_log" common
</VirtualHost>



你可能感兴趣的:(apache,负载均衡,session,丢失,JSESSIONID)