<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 的请求进行了转发: php
ProxyPass /demo balancer://democluster ProxyPassReverse /demo balancer://democluster
问题就出在连接后面不一致的path上面了,致使COOKIES没法共享JSESSIONID
demo1服务器把SESSIONID放在在 /demo1 下面
demo2服务器把SESSIONID放在在 /demo2 下面
所以在访问demo的请求中,拿不到任何一个保存的在COOKIES里面的JSESSIONID,因此每次都会分配新的JSESSIONID web
解决办法一:统一访问的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统一存放在根目录
配置到虚拟服务器中: dom
<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>