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

本文介绍了一个负载均衡场景下JSESSIONID频繁变化的问题及其解决方案。通过调整负载均衡配置,确保会话ID的一致性和Cookie的共享,避免了因路径不一致导致的会话丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在配置负载均衡测试的时候,发现每次刷新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>



转载于:https://my.oschina.net/u/1175235/blog/356824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值