验证nginx长连接是否成功复用,需通过curl时间控制观察连接复用、ss命令检查established连接数稳定性、wireshark抓包确认tcp流复用及fin时机三类方法交叉印证,而非仅依赖配置或无报错。

测试 Nginx keepalive 长连接是否成功复用,不能只看配置有没有加,也不能只依赖“没报错”——关键要验证 TCP 连接是否被真实复用、空闲连接是否稳定驻留、后端是否未被频繁重建连接。下面从客户端到服务端、从命令行到抓包,分三类方法实操验证。
一、用 curl + 时间控制观察连接复用行为
这是最轻量、最直接的初步验证方式,重点看同一 TCP 连接能否承载多个请求:
- 确保 Nginx 已配 keepalive_timeout 30s(或你设定的值),且客户端请求头带
Connection: keep-alive - 用
curl -v --http1.1 -H "Connection: keep-alive" http://your-domain.com/发起首次请求,记下响应中的Connection: keep-alive和Keep-Alive: timeout=30 - 2 秒内再发一次相同请求:
sleep 2 && curl -s -o /dev/null -w "%{http_code}\n" http://your-domain.com/ - 观察两次请求之间是否出现新的
SYN包(可用tcpdump -i any port 80 -c 10辅助捕获);若没有新 SYN,大概率复用了连接
二、用 ss 或 netstat 查看 ESTABLISHED 连接数稳定性
这是判断连接池是否真正生效的核心指标:复用正常时,连接数应平稳,不随请求数线性上涨。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 执行
ss -tan | grep :8080 | grep ESTAB | wc -l(把8080替换为你的后端端口) - 在压测前、压测中(如用 wrk 并发 100 请求)、压测后各执行一次,对比数值
- 若连接数始终稳定在
worker_processes × upstream keepalive附近(比如 4 worker × 32 = 128),说明复用良好;若从 100 涨到 500+,说明基本没复用 - 补充命令:
ss -t -o src :8080可查看每个连接的空闲时长(timer:(keepalive,30sec,0)表示还在保活期内)
三、用 Wireshark 抓包确认 TCP 流复用细节
这是最权威的终局验证,能直观看到底层连接是否复用、何时关闭、有无异常中断:
- 在 Nginx 机器上运行
tcpdump -i any 'tcp port 8080 and (tcp-syn or tcp-fin or tcp-rst)' -w nginx-upstream.pcap - 同时用脚本连续发送 3–5 个 HTTP/1.1 请求(间隔 2 秒),然后等待 35 秒以上再发第 6 个
- 用 Wireshark 打开 pcap 文件,过滤
tcp.port == 8080,重点关注: - 前两个请求是否出现在同一个 TCP 流(右键 → Follow → TCP Stream),中间无 FIN/RST
- 最后一个数据包发出后约 30 秒(即 keepalive_timeout 值),是否出现服务端主动发 FIN
- 第 6 个请求是否触发了新的 SYN,若触发,说明超时机制按预期工作;若没触发且仍在原流中,说明连接还活着
不复杂但容易忽略:复用是否生效,本质是看连接有没有被反复新建。上面三种方法分别从行为、状态、协议层交叉印证,比单看日志或配置可靠得多。










