一次nginx引起的线上502故障

今天突然接到某PM的求救,说微信支付到应用的请求一直返回502,于是初步了解完情况后,就进入了问题排查阶段。

nginx verison 1.10.2

1,查看Nginx error.log,异常信息为

upstream prematurely closed connection while reading response header from upstream
从上游读取响应头时,上游提前关闭连接

根据日志信息初步判断为nginx在等待tomcat响应时,关闭了连接。导致此问题出现的原因,初步猜测为请求超时或返回响应体过载!

2,排查应用是否正常,验证方式:浏览器直接访问验证。结果:【正常

3,排查Nginx到应用服务器目标端口网略是否正常,验证方式:从Nginx服务器telnet 应用服务器ip和端口。结果:【正常

通过这两步排查,排除了应用故障及网络故障。那么开始验证是否是请求超时!

4,修改Nginx nginx.conf ,在对应的映射位置加入如下参数:

#表示与后端服务器连接的超时时间,即发起握手等候响应的超时时间。一般建议不要超过75s,默认时间60s。
 proxy_connect_timeout 90;
 #表示后端服务器的数据回传时间,即在规定时间之内后端服务器必须传完所有的数据,否则,Nginx将断开这个连接。默认时间60s。 
proxy_send_timeout 90; 
#设置Nginx从代理的后端服务器获取信息的时间,表示连接建立成功后,Nginx等待后端服务器的响应时间,其实是Nginx已经进入后端的排队之中等候处理的时间。默认时间60s。 
proxy_read_timeout 90;

再重启执行 nginx -s reload 后,依然不行不管用,感觉到之前的猜测有一点打脸,顿时心里一万只羊驼跑过。不过还好,咱还有第二个猜测啊,那就是返回响应体过载。最后的一根稻草,给点面子呀~!

于是乎,在nginx.conf 的添加如下参数:

#设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置的大小。
 proxy_buffer_size 4k; 
#设置缓冲区的数量和大小。Nginx从代理的后端服务器获取的响应信息,会放置到缓冲区。 
proxy_buffers 4 32k; 
#用于设置系统很忙时可以使用的 proxy_buffers 大小, 官方推荐的大小为 proxy_buffers*2。 
proxy_busy_buffers_size 64k;

重启完nginx后,啪啪打脸~!难道是修改的值不够大?于是把每个数值都乘以100倍~!果然!不!管!用!此时已经怀疑人生了!

emmm,上网查资料,90%的跟老夫的猜测都是一致的!解决方案也是一致的。为毛到我这不好使呢?omg!wtf!

在经过3个小时的绝望后,就去吃饭了。没想到吧,哈哈,哥不陪你玩了(开玩笑)!吃完饭后,突然意识到一个问题,就是!吃饱了脑子就好使了!说正题,tomcat默认采用的协议为 HTTP/1.1,而nginx默认用的是 HTTP/1.0。而HTTP/1.0是不支持keepalive,这样就不能保持活跃连接了啊~!

在酒足饭饱后的第三次猜测,会不会再次打脸呢?答案是肯定是好用的。

答案揭晓时刻:

proxy_http_version 1.1; 
proxy_set_header Connection "";

Nginx默认使用HTTP1.0从后端获取响应返还给客户端,但是HTTP/1.0不支持keepalive,因此需要配置proxy_http_version 1.1proxy_set_header Connection默认close:通知后端服务器主动关闭连接,这样会导致任何一个客户端的请求都在后端服务器上产生了一个TIME-WAIT状态的连接。

问题成功解决!突然发现羊驼也是很可爱的!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林德熙的博客

win10 uwp 后台获取资源

需要知道的是,获取的资源类型是 Object ,这时,建议使用 cast 转换,而不是使用 as。

1291
来自专栏信安之路

内网渗透主机发现的技巧

在内网渗透中,为了扩大战果,往往需要寻找更多主机并且对这些主机进行安全检测或帐号密码测试,所以主机发现这个步骤必不可少。我们如何在不实用扫描器的情况下发现更多主...

2910
来自专栏FreeBuf

没有外部工具,如何快速发现Windows中毒了

从事应急响应工作几年之后,我认为总结一份快速确定计算机是否被感染木马和病毒的“方法论”是十分有用的。这显然不是那么简单的,可我却发现感染几乎存在于所有不复杂的攻...

2095
来自专栏程序猿DD

都在说微服务,那么微服务的反模式和陷阱是什么(三)

前文导读: 《都在说微服务,那么微服务的反模式和陷阱是什么(一)》 《都在说微服务,那么微服务的反模式和陷阱是什么(二)》 九、通信协议使用的陷阱 在微服务架构...

1935
来自专栏小白课代表

软件分享 | 3DS MAX 2018安装教程

3D Studio Max,常简称为3d Max或3dsMAX,是Discreet公司开发的(后被Autodesk公司合并)基于PC系统的三维动画渲染和制作软件...

971
来自专栏北京马哥教育

linux系统被入侵后处理实战

作者 李振良 | 来源 51cto 糖豆贴心提醒,本文阅读时间8分钟,文末有秘密! ? 事件背景 操作系统:Ubuntu12.04_x64 运行业务:公司...

4885
来自专栏伪君子的梦呓

如何备份一些容易看不到的文章

36910
来自专栏恰童鞋骚年

操作系统核心原理-3.进程原理(上):进程概要

进程管理、内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序。当一个程序被加载到内存之后就变...

1952
来自专栏BeJavaGod

什么是分布式系统中的幂等性

最近很多人都在谈论幂等性,好吧,这回我也来聊聊这个话题,光看着俩字,一开始的确有点一头雾水,语文不好嘛,词太专业嘛,对吧 现如今我们的系统大多拆分为分布式SOA...

3643
来自专栏Laoqi's Linux运维专列

mariadb galera集群配置

3324

扫码关注云+社区

领取腾讯云代金券