当前位置:首页 > 服务器技术 > nginx

Nginx+Tomcat负载均衡之session问题

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

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

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

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


项目结构如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110303268.jpg" title="8_项目结构.png" />

过滤器配置如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110303722.jpg" title="9_sessionfilter.png" />

web.xml配置如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110304107.jpg" title="2015-07-07_132844.png" />
nginx配置如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110304592.jpg" title="7_nginx配置文件.png" />

用户操作如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110304991.jpg" title="11_页面变化过程.png" />

服务器处理流程分析如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110305765.jpg" title="10_处理流程.png" />

最后,两个tomcat控制台输出如下:

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110306591.jpg" title="5_tomcat1控制台.png" />

技术分享650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112110307093.jpg" title="6_tomcat2控制台.png" />

从控制台输出,我们可以看到:在访问tomcat1时被拦截了并重定向到首页


本文出自 “十里稻花香” 博客,请务必保留此出处http://5880861.blog.51cto.com/5870861/1671636

原文:http://5880861.blog.51cto.com/5870861/1671636


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!