nginx用upstream做负载均衡 服务端用session的 session一致性的所有解决方案

6 篇文章 0 订阅

session跟cookie不一样,session是存放在服务端,在多服务器的环境下,用的session需要分配在同一个服务器才能正常识别,而,nginx的upstream用来做负载均衡很方便的,最后那个方案是最方便的,懒得看的可以直接拉到最后

方案一:redis做中间件存储session信息

这个方案对需要频繁对session进行读写的服务里面实际是不太友好的,因为不论redis是放在哪里,内网还是外网,多服务的环境下还是需要频繁的网络请求,这里面的时间差积沙成塔,性价比是很低

方案二:ip_hash

这个方案在百度上有很多人在用,原理是根据IP的C段之前三位数的hash分配服务器,这样同一个ip就能持续连同一台服务器,但是实际有一个很大的问题,用户在4G环境,快速移动的状态下,基站分配的ip地址是有差别的,这样实际就是没用

upstream session_server{    
hash        ip_hash;   
server      127.0.0.1:8080;    
server      127.0.0.2:8080;
}

方案三:request_uri

跟方案二差不多,对session一致性这个需求的用处不大

方案四:session所有服务器同步

跟方案一的原理差不多,不过这个方案是通过tomcat的server.xml文件进行配置,具体配置文件百度有很多,这个挺稳的

方案五:@EnableRedisHttpSession 注解

springboot可以直接通过设置这个注解在redis配置,实际就是方案一的自动构建版

方案六:cookie_jsessionid(最好用)

其实跟方案二差不多,但是我不知道为啥没什么人推荐这个方法,他是根据cookie或jsessionid来分配服务器,其实就是刚好满足我们的 "session一致性"的需求,这是nginx17之后更新的新标签,大家可以去官方文档查阅一下.

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

这个方案需要不要随意初始化用户的session,让同一个前端用同一个session来识别
不喜欢动session,可以在header传点序列号或者标识符也行的~

方案七:hash $header_key

在header传一个key的参数用于定位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值