Nginx 流量看板:如何通过配置变量排查反向代理中的 TCP 丢包问题

云婷同学_3403

云婷同学_3403

2026-06-22

885人浏览

原创

nginx 本身不提供原生 tcp 丢包计数器,需结合 stub_status 连接变量、error.log 错误信号(如 upstream timed out、connection reset by peer)及系统指标(netstat -s 重传统计、ss -i retrans、ethtool 网卡丢包)交叉分析,定位丢包发生环节。

nginx 流量看板:如何通过配置变量排查反向代理中的 tcp 丢包问题

直接看 TCP 丢包,Nginx 本身不提供原生的“丢包计数器”,它不是网络层设备,无法捕获链路层或内核收发队列丢弃的数据包。真正要定位 TCP 丢包,得结合系统级指标和 Nginx 可观测变量交叉分析——重点不是让 Nginx “统计丢包”,而是用它的日志、连接状态与错误信号,反向推断丢包发生的环节和诱因。

关注 Nginx 连接级关键变量

Nginx 的 $connection、$connections_active、$connections_reading、$connections_writing、$connections_waiting 等内置变量,可通过 stub_status 模块暴露为实时指标。它们虽不等于丢包数,但异常波动能提示问题方向:

  • connections_active 持续高位 + waiting 长期为 0:说明连接积压在读写阶段,可能后端响应慢或网络延迟高,容易触发 TCP 重传甚至超时断连
  • connections_writing 突增且长时间不降:Nginx 正在大量向客户端发送响应,若此时服务器带宽打满或网卡中断处理不及时,内核可能丢弃发送队列中的包(如 tx_dropped 上升)
  • stub_status 中 connections_active 忽然归零又暴涨:可能是大量连接被内核强制重置(RST),常见于防火墙拦截、SYN flood 防护触发或中间设备异常

从 error.log 挖掘丢包相关错误信号

丢包本身不会直接记为“xxx packet dropped”,但会引发一系列可记录的失败行为。重点关注以下几类日志条目:

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • “upstream timed out”:后端无响应,可能因中间链路丢包导致 SYN/ACK 或数据包未达,Nginx 等待超时后关闭连接
  • “client closed connection while waiting for upstream”:客户端主动断开,常因前端网络不稳定(如移动网络切换、WIFI 断续)造成 ACK 丢失,TCP 重传失败后浏览器放弃
  • “recv() failed (110: Connection timed out)” 或 “(104: Connection reset by peer)”:前者指向读超时,后者多为对端异常终止,二者都与底层丢包/乱序高度相关
  • 大量 “*n connect() failed (111: Connection refused)”:虽是连接拒绝,但如果集中在某台 upstream,也可能是该节点因丢包导致健康检查失败而被摘除

配合系统指标做闭环验证

仅靠 Nginx 日志和变量不够,必须联动操作系统层面数据才能确认是否真发生丢包:

  • 用 ss -i 查单个连接的 retrans(重传次数)、rto(重传超时)、qloss(队列丢包)字段
  • 用 netstat -s | grep -A 5 -B 5 "segments retransm" 统计全系统 TCP 重传总量
  • 检查网卡收发队列:ethtool -S eth0 | grep -E "(drop|buffer|overrun)",重点关注 rx_missed_errors、tx_aborted_errors
  • 对比同一时段 Nginx 的 upstream_response_time 分位值与 upstream_connect_time,若 connect_time 延迟激增但 response_time 正常,大概率是建连阶段丢包(SYN 包丢失)

针对 TCP 代理场景的特别注意点

如果你启用了 stream 模块做四层代理(如数据库、Redis、自定义 TCP 服务),需额外关注:

  • stream 块中必须配置 proxy_timeout 和 proxy_responses,否则长连接空闲时易被中间设备(如云厂商 SLB、防火墙)静默断连
  • 启用健康检查时,check interval 不宜过短(建议 ≥3s),避免探测包密集发送加剧链路压力
  • stream 日志默认不开启,需显式添加 access_log /var/log/nginx/stream_access.log 并使用 $status、$upstream_addr、$bytes_sent 等变量,便于比对收发字节数差异
  • 确保 tcp_nodelay on 和 tcp_nopush on 在 stream 块中合理启用,减少小包粘连与延迟

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

383

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3327

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6045

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1476

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3938

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

457

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习