阿使得肌肤· 发表于 2018-12-5 10:58:15

Nginx+Tomcat负载均衡之session问题

      Nginx与Tomcat做负载均衡的时候有一个重要的问题必须考虑,那就是Session。

      试想一下,假设Nginx采用轮询策略,应用被部署到tomcat1和tomcat2上,用户访问tomcat1时被要求先登录,于是用户登录。接下来用户再次发起应用的请求时,会由tocmat2进行处理(因为轮询,请求被依次交替转发到tomcat1和tomcat2上),这次tomcat2发现用户没登录,于是要求用户登录,这是用户就很疑惑呀,我刚才登录成功了呀,怎样还要登录。造成这个现象的原因是用户session保存在tomcat1上,而他访问tomcat2时,对tomcat2来说,用户确实没有登录。

      口说无凭,何以为证呢?下面用一个例子来验证上面所说的:

      例子是这样的:用户访问应用test,输入用户名和密码登录之后,填写自己最喜欢的颜色和水果,然后提交,页面显示用户填写的结果。如果用户未登录,会在控制台中输出相应的信息。
  

  项目结构如下:
  
http://s3.运维网.com/wyfs02/M00/6F/65/wKioL1WbZOfwbmasAADNLLm-GtU701.jpg
  过滤器配置如下:
http://s3.运维网.com/wyfs02/M00/6F/68/wKiom1WbYxnDuVw7AAN1a-YbnWk335.jpg
  web.xml配置如下:
http://s3.运维网.com/wyfs02/M01/6F/68/wKiom1WbY67iqcUWAAWC6_066nc375.jpg
nginx配置如下:
http://s3.运维网.com/wyfs02/M00/6F/65/wKioL1WbZfKSGgtvAAGoDv9OOt4146.jpg
  用户操作如下:
http://s3.运维网.com/wyfs02/M00/6F/65/wKioL1WbZk6Bto7PAAPdLsUdUaQ782.jpg
  服务器处理流程分析如下:
http://s3.运维网.com/wyfs02/M02/6F/68/wKiom1WbZLLg_YmuAAICqqztipw564.jpg
  最后,两个tomcat控制台输出如下:
http://s3.运维网.com/wyfs02/M02/6F/68/wKiom1WbZPqRiIiSAAQmNNHvgcs717.jpg
http://s3.运维网.com/wyfs02/M00/6F/66/wKioL1WbZsjRxvp4AAQMX3DtMqg761.jpg
  从控制台输出,我们可以看到:在访问tomcat1时被拦截了并重定向到首页

  



附件:http://down.运维网.com/data/2365879

页: [1]
查看完整版本: Nginx+Tomcat负载均衡之session问题