您的位置:首页 > 运维架构 > Apache

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

2014-12-16 00:00 316 查看
摘要: 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 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息