当前位置: > Linux服务器 > apache >

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

时间:2015-10-07 14:08来源:linux.it.net.cn 作者:IT
之前在配置负载均衡测试的时候,发现每次刷新JSESSIONID都会变化(即使请求全部分发到同一台服务器上),我的负载均衡配置如下:
1
2
3
4
<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 的请求进行了转发:

 
1
2
ProxyPass /demo balancer://democluster  ProxyPassReverse /demo balancer://democluster

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

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

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

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

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

配置到虚拟服务器中:

 
1
2
3
4
5
6
7
8
9
10
11
<VirtualHost 127.0.0.1:80>
    ServerAdmin webmaster@dummy-host.example.com
    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>
(责任编辑:IT)
------分隔线----------------------------