nginx一次请求,转发到多个地址,引起iphash的session不能共享问题

问题描述:
在公司项目中,采用了双机部署,负载均衡方式采用iphash

upstream xxxx {
        ip_hash;
        server 192.168.241.1:8080; #服务器A
        server 192.168.241.1:8010; #服务器B
 }

在测试阶段,有一定几率产生,正常操作确存在退出登录界面的问题。
最开始分析是,网络问题,登录请求刚开始转发到服务器A,服务器A有session,其他的请求转发到服务器B,服务器B没有session导致退出系统。分析nginx日志,确没有发现这样的问题,我很是疑惑。。

但是却发现nginx日志中有这样的情况

 192.168.241.1:8080, 192.168.241.1:8010 | 0.202, 0.302 |  500, 500  || "GET /client-web/pages/stbManager/initStb.do HTTP/1.1" 500

请求client-web/pages/stbManager/initStb.do,同时转发到两个服务器,这就很奇怪。。而且这种情况大部分是发生500 404 等错误才会发生的,而且紧接着就会有这样的日志

192.168.241.1:8010 | 0.014  |  200  || "GET /client-web/pages/manage/login/sysOut.do HTTP/1.1" 200 

也就是服务器B(8010)会退出系统,这很好理解,用户在服务器A登录,请求转发到B上,B系统没有session发生退出,很正常。但是服务器A上的那个用户为什么会退出?还有为什么会发生一个请求转发到两个地址?

一个请求转发到两个地址

进过分析公司的nginx日志发现有这样的配置

proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

意思就是如果发生超时,500 503 404 等错误会转到其他的服务器上。这个也就是nginx的重试机制。

服务器A的用户退出的原因

通过调试程序发现,用户A的请求中有sessionid,当这个请求转发到服务器B上,服务器将这个请求跳转到登录界面,所以用户A会跳转到登录界面的原因。

解决问题

  • 谨慎使用重试机制,这回造成很多问题。将重试机制注销掉。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值