天天看点

印象最深的Bug处理-nginx代理双节点页面不停刷新

入行第一年,就遇到这个问题,我记得很清晰,这也是我上班的第一个问题。一个项目2个tomcat上部署的是相同的应用,由于用户现场要求不可为单机,简单的类似于做了一个负载均衡集群。

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

根据平时的经验定位问题,有可能有如下几个方面:

1.应用程序软件包问题。

2.页面刷新机制存在问题。

3.集群配置问题。

4.代理(nginx)配置问题。

问题分析:

1.若是代码存在问题,需要和开发对接,联系该项目对应的开发人员,确认包是否有问题。答案是开发不会存在问题,在测试环境中测试也没有此问题。但是为什么生产环境上就会存在此问题呢?

2.页面刷新机制和开发对接了下,确认在这个访问的页面确实加入了刷新的机制,但是不是实时刷新,那为什么呢?

好,基本上排除了前2项,再继续考虑其他原因。

问题排查思路:

1.确认是否是集群的问题导致

(1)停止掉1台tomcat服务----访问页面----我们发现页面可以访问到,而且页面是静止的,不在一直刷新。

(2)启动停止掉的tomcat服务----访问页面----又开始不断的刷屏

确认是集群导致的问题。

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

查看配置文件:

代理位置配置如下:

upstream appleserver {

     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;#注意:添加了此行内容。

再次重新启动nginx。

nginx -s reload

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

印象最深的Bug处理-nginx代理双节点页面不停刷新

虽然问题很简单,但是作为第一个入行问题解决了我很开心。nginx是一个高性能的HTTP和反向代理服务,它是由一个俄罗斯的牛逼的大牛开发的,既可以用作中间件,又可用做负载均衡。Nginx是一款轻量级的Web 服务器/反向代理服务器,其特点是占有内存少,并发能力强。nginx常用的支持4种负载均衡调度算法(策略)有:轮训、ip_hash、最少连接、权重算法。另外有2种是第三方的(不做详解):fair(第三方) 响应时间方式 ,url_hash(第三方) 依据URL分配方式。每个请求按访问IP的hash值结果进行分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。如果后端服务器down掉,要手工down掉。在实际环境运用中,需要根据不同的场景选择性运用,大都是多种策略结合使用并且根据项目实际需求来确认。

继续阅读