网站首页 > 技术教程 正文
一、背景
前端用nginx做横向扩展负载均衡,然后我这里用的是轮询策略,但是发现,在第一个节点登录后,访问第二个节点显示没有登录,此时是正常的,但是后面又访问了第一个节点,显示也没有登录,感觉每次轮询切换cookie中的id就变了一样,为什么呢?
二、过程分析
这里对同一个应用七两个节点,一个是8080,一个是8081,然后应用又两个接口,一个是登录,一个是下单,下单只有在登录的情况下才能下单,下面是浏览器访问过程分析。
1、第一次请求登录
在浏览器请求登录
http://127.0.0.1/login
Request Cookies为:925BF72A36EA953A7D908F19AF9BFEA5
Response Cookies为:C865EB29BEC515D7260AA6FB8F719692
因为第一次访问,请求的是8081那台机,后台session中没有JSESSIONID所以新生成一个,后续请求就以第二个JSESSIONID来请求。
2、第二次请求下单
在浏览器请求下单
http://127.0.0.1/order
Request Cookies为:C865EB29BEC515D7260AA6FB8F719692
Response Cookies为:B817F3B455CA8876A7C73E3042492514
因为nginx做了负载均衡,所以第二次请求的是8080那台机,后台session中也没有JSESSIONID所以又新生成一个,后面就又用新生成的JSESSIONID来请求。
3、第三次请求下单
在浏览器请求下单
http://127.0.0.1/order
Request Cookies为:B817F3B455CA8876A7C73E3042492514
Response Cookies为:50B1182935BC7A0F1B773C86F7234669
因为nginx做了负载均衡,所以第三次请求的是8081那台机,但还是没有登录,因为你第二次新返回了JSESSIONID,跟第一次请求返回的不同,所以后台又生成了一个新的JSESSIONID,所以用户相当于没有登录了。
三、原因总结以及解决方案
1、原因总结
通过上面的测试可以知道,因为后台做了负载均衡,并且不是绑定IP的负载策略,用的是轮询的策略,所以每次轮询切换后,后端在内存中都找不到对应的JSESSIONID,判定为session失效而重新创建session,之前在session中保存的信息就会失效,所以当然登录失败啦,就算轮询到最初登录的那台机也没有用,中间已经生成了新的JSESSIONID给客户端。
2、解决办法
所以用轮询模式而不是用IP绑定的模式做负载均衡,需要将JSESSIONID做共享,比如放到数据库,或者redis,对于java来说用spring session是很方便的。
猜你喜欢
- 2024-10-15 haproxy和nginx负载均衡(nginx负载均衡ip_hash策略)
- 2024-10-15 Centos 7 network.service 启动失败
- 2024-10-05 nginx报错之413 Request Entity Too Large导致文件上传失败的问题
- 2024-10-05 Nginx系列:Nginx自带后端健康检查
- 2024-10-05 Nginx负载均衡健康检测,你了解过吗?
- 2024-10-05 Nginx负载均衡原理及应用实践(nginx负载均衡策略有哪些,它是如何实现的)
- 2024-10-05 SSL证书安装失败怎么办?看这里教你轻松解决
- 2024-10-05 「系统架构」Nginx调优之变量的使用(4)
- 2024-10-05 面试中关于Nginx的十问九答(面试中关于nginx的十问九答有哪些)
- 2024-10-05 Zabbix 5.2由浅入深之监控Nginx(监控nginx访问日志)
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)