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

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

上一篇:A悦创学员作业代码提交方法


下一篇:upstream