排查防火墙拦截导致的连接超时,核心是识别“连接未建立”痕迹:http/3场景看error.log中quic connection timed out或无quic日志;https/代理场景查connect() failed (111/110)及upstream超时无后端记录;需结合tcpdump验证syn是否到达。

排查 Nginx 错误日志中由防火墙拦截引发的连接超时异常,核心是识别“连接未建立”而非“响应慢”的痕迹。防火墙(包括系统 iptables、云安全组、WAF、家用路由器等)常在传输层直接丢弃数据包,导致 Nginx 根本收不到请求或无法完成握手——这类问题不会出现在访问日志里,但会在 /var/log/nginx/error.log 中留下关键线索。
看日志是否有 QUIC/UDP 相关失败(HTTP/3 场景)
启用 HTTP/3 后,若防火墙拦截 UDP 443,Nginx 日志会出现典型 QUIC 层静默失败:
- 出现
quic connection timed out或no packet received→ 表明 Initial 包未到达,极大概率是 UDP 被中间设备丢弃 - 出现
SSL_do_handshake() failed且无client: xxx或to upstream上下文 → 不是 TLS 协商失败,而是底层 UDP 连接压根没建立 - 日志完全安静,无任何
quic、udp、handshake字样 → 客户端请求甚至没抵达 Nginx,问题在更外层(如云安全组未放行 UDP、路由器禁用 QUIC)
看连接类错误是否集中于 handshake 阶段(TCP/HTTP/1.1 或代理场景)
对于普通 HTTPS 或反向代理,防火墙常在 TCP 握手阶段切断连接,错误日志会体现为“连接拒绝”或“超时无响应”:
-
connect() failed (111: Connection refused)→ 后端服务未监听,或防火墙 DROP/REJECT 了 SYN 包 -
connect() failed (110: Connection timed out)→ SYN 发出后无 SYN-ACK 返回,常见于安全组未放行端口、iptables 缺少 INPUT 规则、或 WAF 主动限速 - 反复出现
upstream connect error or timeout但后端日志无记录 → 请求未到达上游,防火墙在 Nginx 与 upstream 之间截断
对比日志时间与网络抓包结果
单看日志易误判,必须结合实测确认是否真被拦截:
- 在服务器执行
tcpdump -i any port 443 and tcp -w http2-test.pcap,同时用客户端访问 → 若无入向 SYN 包,说明防火墙在入口就丢弃了 - 对 upstream 抓包:
tcpdump -i any host 10.0.1.100 and port 8080→ 若有 SYN 但无 SYN-ACK,且后端ss -tln显示端口监听正常,则防火墙在链路中段拦截 - 发现大量 RST 包来自非后端 IP(如网关地址)→ 典型硬件防火墙主动重置连接
排除健康检查假死干扰(集群场景)
若使用 health_check,防火墙可能只拦截探针而不影响业务流量,导致 Nginx 误判节点下线:
- 日志中频繁出现
failed to connect或timeout仅针对/health路径 → 检查 WAF 是否屏蔽该路径或自定义 User-Agent - 同一 upstream 节点,
curl -v http://ip:port/health失败,但curl -v http://ip:port/api成功 → 防火墙策略按路径/头做了差异化处理 - 改用
type=tcp健康检查后日志不再报错 → 原 HTTP 探针被应用层防火墙识别为异常流量











