Nginx 集群下的 Session共享

本文导读

  • 集群是为了给服务器负载均衡,减轻压力,但对于用户来说,不管访问的是哪台具体的服务器,内容应该是一样的才对,不可能在服务器A下的单,一刷新访问到服务器B时,订单就没有,这是不允许的。用户的Session不一致,这就是引出了“Session 共享”的问题。
  • 解决 session 共享问题通常有如下3种方式:

web服务器自己解决

  • 仅在window下使用,采用web服务器解决(广播机制),注意可能会导致 tomcat 性能下降。
  • 第一步是修改tomcat服务器conf目录下的server.xml文件,使其支持共享:将引擎标签下的 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>,注释去掉


  • 第二步二是修改项目的配置文件 web.xml中添加一个节点:“<distributable/>”


  • 修改好了两个Tomcat的server.xml文件以及两个项目的web.xml文件之后,重启两个Tomcat服务器,再次浏览器访问时,发现跳转不同的Tomcat下的应用时,Session的id值是一样的了,即Session共享了



upstream中添加 ip_hash

  • 保证一个ip地址永远的访问一台web服务器,这样也就不存在session共享问题了,这是在linux常用的方式
  • 在nginx的配置文件nginx.conf中的upstream下添加 ip_hash;


将session的id放入redis中

  • 可以将session的id放入redis中