tcpdump分析nginx报错
简介
tcpdump抓包,然后wireshark分析数据包,从而确认nginx报错。
排查过程
现象
- 开发反馈外网访问应用报502
- nginx分发请求给应用服务器,查看nginx代理错误日志
2023/12/11 18:27:32 [error] 17764#17764: *2266838421 upstream prematurely closed connection \
while reading response header from upstream,client: 192.168.1.5, server: _, request: "POST /xxx HTTP/1.1",
upstream: "http://ip:port/xxx", host: "xxx"
根据日志可以初步认为是由于应用服务器异常断开连接导致的访问异常。
抓包分析
#在nginx代理服务器上抓到应用服务器(192.168.1.5:54069)的tcp连接
tcpdump -i ens192 ip host 192.168.1.5 and tcp port 54069 -w record.pcap
#同时用tail -f error.log跟踪nginx报错,发现报错之后就可以结束抓包了
#wireshark打开record.pcap
#过滤应用服务器主动断开tcp的数据包
tcp.flags.fin == 1 and ip.src == 192.168.1.5
#然后根据代理端口(代理的端口可用来区别连接)筛选某个tcp连接从建立连接到断开连接的过程
#从下面图片可以看到6,7,8是建立了tcp连接,9是代理向应用服务器发送请求,\
#10是应用服务器反馈收到请求包,11是应用发送了fin包断开连接,确认了是应用异常断开连接导致。
#这也可以用来排查因为应用没有主动关闭连接导致的tcp连接过多的异常
#一般代理会配置keep-alive,当多长时间没有请求代理就会主动关闭连接
#但是应用如果没有主动断开连接,那么就是代理服务器到时间了断开连接



浙公网安备 33010602011771号