问题排查后,nginx的反向代理感觉失效了一样

这篇博客讲述了作者在处理一个app头像上传接口报502错误的问题时,通过链路梳理发现是nginx反向代理的问题。经过排查,确定是由于全连接队列满,导致nginx未能正确建立连接。解决方案是调整内核参数和nginx的backlog值,从而解决了问题。
摘要由CSDN通过智能技术生成

背景#

最近,负责基础设施的同事,要对一批测试环境机器进行回收,回收就涉及到应用迁移,问题是整个过程一团乱。比如服务器A上一堆应用要调用服务器B上一堆服务,结果服务器B被回收了,然后服务器A上一堆应用报错。

今天就是负责查一个问题,app上一个头像上传的接口,之前都好好的,不知道怎么就不能访问了,报错现象是在请求后等待n秒超时,然后服务端报错502。

这个服务也不知道谁维护的,可能维护的人早已离职了也说不定,这也是这边的常态吧,人走了,负责的服务还在服务器上跑,也没有交接文档。

问题现象#

链路梳理#

先上个图,再解释整个链路:

image-20230824200723942

现象就是,app端调用外网ip(记作A): xxxx端口的某个接口,超时后报502错误,因为是http协议,能从响应中看出来是Apache。

然后,就是去找网络同事,问外网ip:xxx端口对应的内网ip和端口,得到了内网ip(记作B):80端口。接下来,又是找负责服务器的同事,要服务器B的密码,一开始以为是linux机器,没想到还是windows的。vnc登录进去后,根据端口号找到对应的进程,发现是Apache HTTP Server,这个东西我也不熟悉,知道它类似于nginx,功能类似,但是几乎一直没用过,所幸,在程序的根目录下,找到了一个配置文件,配置文件中配置了反向代理,将请求反向代理到了服务器C:8088端口。

这个服务器C,基本就是今天的主角了。

于是,又去找同事要服务器C的密码,这次还好,是个linux机器,查询8088端口对应的服务,是个nginx进程,然后查看该进程的配置文件,发现请求被反向代理到了本机的9901端口。

问题现象#

梳理完整个链路后,我决定去看看最后的java服务的日志,因为是第一次看到这个服务,也不知道日志文件在哪里。cd到/proc/服务pid/fd目录下,看到了其打开的文件,里面有个日志文件,但是,打开日志文件,发现里面空空如也。

我又去调了调日志级别,然后app发起请求,发现还是没啥日志。

然后开始怀疑请求没到服务这里,行吧,那还是跟着链路排查下,看看怎么回事。

于是在linux机器上开启java服务的9901端口的抓包,然后重试,发现还是空空如也,什么包都没有。

 

Copy

tcpdump -i any tcp port 9901 -Ann

这就奇怪了,没到java服务,那到了nginx没有呢?然后开始抓nginx这块:

 

Copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值