内网服务器通过网闸访问外网前置机,防火墙存在会话,但 Nginx 无访问日志
现象汇总:
网闸可以看到通道连接计数;
外网防火墙上可以看到网闸外端机→前置机的 TCP 会话,端口匹配;
但是外网前置机 Nginx 没有产生访问日志,业务无响应。
核心原理:网闸不是 IP 报文透传,是连接终止‑数据摆渡‑重建新 TCP 连接。内网服务器与网闸内网侧建立一套 TCP;网闸外网侧重新发起一套全新 TCP 会话到外网防火墙、再到 Nginx 服务器。
防火墙看到的会话,只是网闸外网侧已经发起的 TCP 控制连接(三次握手完成),不代表应用层 HTTP 请求数据已经成功摆渡、投递到 Nginx 应用层。
故障分层定位(从网闸→防火墙→服务器)
第一层:网闸侧(最高概率故障点)
TCP 握手成功摆渡失败:网闸通道只完成 TCP 握手,HTTP 应用数据被拦截丢弃
网闸 TCP 代理通道完成内外两侧三次握手,所以网闸显示连接计数、防火墙生成 TCP 会话表;
但是 HTTP 报文内容校验失败(白名单、关键字、格式校验、HTTP 协议畸形、不支持 HTTP/1.1、缺少 Host 头),应用载荷被网闸丢弃,握手成功,没有把 HTTP 请求摆渡到外网侧;
结果:TCP 连接存在,没有 HTTP payload 给到 Nginx,Nginx 不会生成 access 日志(Nginx 访问日志只有收到完整 HTTP 请求才会记录,单纯 TCP 连接建立不产生日志)。
排查:
查看网闸通道日志、审计日志、丢弃日志,看是否存在应用层报文拒绝、协议校验失败;
网闸通道是否配置 HTTP 代理 / 透明 TCP;HTTP 业务优先使用网闸专用 HTTP 通道,不要通用 TCP 通道;
检查网闸通道白名单:目的 IP、目的端口、协议、应用层特征;确认没有开启严格内容检测拦截正常 HTTP 报文;
调大网闸通道的 MTU、超时时间;网闸空闲超时时间不要过小。
网闸半连接问题
内网侧客户端发送完 SYN 完成握手,过早发送 FIN 关闭连接;网闸检测到一侧关闭,直接把外网侧新建的 TCP 连接直接断开,HTTP 数据还没有摆渡出去。防火墙会话表还会短暂残留。
解决:业务侧调整 TCP 关闭逻辑,网闸通道调大会话空闲超时时间。
关键区分:
网闸 “连接数量” 计数 = TCP 握手成功的连接数,不等于应用数据摆渡成功的数量。握手成功不代表数据摆渡成功。
第二层:外网防火墙侧
防火墙已经建立会话表,说明TCP SYN/SYN‑ACK/ACK 三次握手报文双向到达,但是需要确认两点:
是否存在报文长度大报文被防火墙 IPS / 应用识别模块丢弃;小握手包放行,HTTP 请求大数据包被 IPS 拦截;
排查:防火墙开启会话统计,抓包外网防火墙出接口(朝向 Nginx 服务器方向),看是否有GET/POST的 HTTP 请求报文向外发送。
如果防火墙出接口抓包看不到 HTTP 请求 payload:数据根本没有离开防火墙,问题回溯网闸。
如果防火墙出接口能抓到完整 HTTP 请求报文,代表网闸、防火墙转发正常,问题落在 Nginx 服务器本机。
确认防火墙没有开启 TCP 代理、内容安全检测误拦截;安全策略仅放行 TCP 端口,不要附加应用过滤。
第三层:外网 Nginx 前置机服务器(防火墙出接口能抓到 HTTP 报文再排查本层)
前提:网卡抓包确认网卡收到完整 HTTP 请求,再往下排查。
Nginx 没有匹配到对应的server{}虚拟主机块;请求没有命中任何 server,不会写入对应 access_log 日志;
检查listen 端口,确认监听 0.0.0.0,不是仅监听 127.0.0.1;配置default_server兜底虚拟主机。
Linux 本机防火墙iptables/firewalld、selinux 拦截入站报文;报文到网卡,被内核丢弃,不递交给 Nginx 进程。
bash
#查看网卡是否收到报文
tcpdump -i 业务网卡 port 业务端口
#查看系统层是否丢包
netstat -s
ss‑s
Nginx 日志配置:access_log off关闭日志、日志文件权限不足、开启 buffer 缓冲未刷新。
注意:单纯 TCP 连接建立,没有完整 HTTP 请求,Nginx不会写 access.log 访问日志,只建立 TCP socket 连接不触发日志记录。
现场标准排查步骤(按顺序执行)
在外网防火墙连接 Nginx 的出接口抓包:
✅抓包能看到完整 HTTP GET/POST 请求报文 → 网闸、防火墙转发正常,问题在 Nginx 服务器本机。
❌抓包只有 TCP 握手包 (SYN/SYN‑ACK/ACK),看不到 HTTP 应用数据 → 网闸侧应用层数据摆渡失败,优先排查网闸通道配置与审计丢弃日志(本场景最高概率)。
登录网闸,查看通道审计日志、丢弃日志,看 HTTP 报文是否被协议校验 / 内容过滤丢弃;确认通道类型(HTTP 通道 / TCP 透明通道)。
HTTP 业务建议用网闸的 HTTP 专用通道,不要通用 TCP 通道,通用 TCP 通道对 HTTP 协议校验严格容易丢应用载荷。
如果防火墙抓包已经看到完整 HTTP 请求,到 Nginx 服务器本机网卡抓包,确认报文到达服务器网卡;再检查 firewalld/iptables、Nginx 虚拟主机配置、access_log 配置。
暂无评论
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作
举报
×
侵犯我的权益
×
侵犯了我企业的权益
×
抄袭了我的内容
×
原文链接或出处
诽谤我
×
对根叔社区有害的内容
×
不规范转载
×
举报说明
暂无评论