nginx代理双节点遇到问题1--页面不停刷新问题解决方法

前提条件:最近在部署一个项目,项目的架构为:nginx代理2个tomcat进行统一出口(这里简单的介绍了这里,其他的复杂架构都略了)。架构图简单画法如下,貌似有点吓人,啊哈哈哈!!!!!!!!!!!!

nginx代理双节点遇到问题1--页面不停刷新问题解决方法
2个tomcat上部署的是相同的应用,由于用户现场要求不可为单机,简单的类似于做了一个集群。

但是在一个特定的页面访问时出现了一个问题:页面一直在不断的刷新,在不停的访问页面。但看起来似乎在跳转到其他的URL下,但是页面还是显示的此页面。

问题定位:
1.怀疑可能是开发给的程序包存在问题。
2.页面刷新机制存在问题。
3.集群问题。
4.代理(nginx)配置问题。

问题分析:
1.若是代码存在问题,需要和开发对接,于是联系开发同事,确认包是否有问题。当然得到的答案是开发不会存在问题,而且他们在测试环境中测试也没有此问题。但是为什么生产环境上就会存在此问题呢
2.页面刷新机制和开发对接了下,确认在这个访问的页面确实加入了刷新的机制,但是不是实时刷新,那为什么呢?
好,排除了前2项,在考虑3,4可能的问题。

问题排查思路:
1.确认是否是集群的问题导致
(1)停止掉1台tomcat服务----访问页面----我们发现页面可以访问到,而且页面是静止的,不在一直刷新。
(2)启动停止掉的tomcat服务----访问页面----又开始不断的刷屏
确认是集群导致的问题。

2.既然是集群导致的问题,那么我们是由nginx进行配置的代理。那会不会是nginx配置处不对呢??
查看配置文件:
代理位置配置如下:

  upstream skyfanserver {
     server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=10s;
     server 127.0.0.2:8080 weight=1 max_fails=3 fail_timeout=10s;
  } 

根据实际现场情况分析可能是nginx配置存在问题,于是想到了ip_hash的问题。

查了下资料显示:Nginx中的ip_hash技术能够将某个ip 的请求定向到同一台后端web机器中,这样一来这个ip 下的客户端和某个后端 web机器就能建立起稳固的session。

那么我们页面不断的熟悉是不是由于没有建立固定的session加上页面的刷新机制导致的呢?

好那么我们就来试下

配置文件修改为:

  upstream skyfanserver {
     ip_hash;#注意:添加了此行内容!!!!!!!!
     server 127.0.0.1:8080 weight=1 max_fails=3 fail_timeout=10s;
     server 127.0.0.2:8080 weight=1 max_fails=3 fail_timeout=10s;
  } 

再次重新启动nginx。

nginx -s reload

在浏览器*问页面,查看,嗯,解决了,页面不在一直刷新了!!!!OK,问题解决!!!!!

有想进一步了解Nginx的负载均衡机制及算法的可以查看我的博客nginx4种负载均衡算法速记及详解