要让nginx高效代理tcp流量,必须启用stream模块并针对性配置连接控制、健康探测与调度策略。需编译时加入--with-stream参数,定义upstream集群设置weight、max_fails、backup及keepalive,server块中配置so_keepalive、proxy_connect_timeout等参数,并在1.25.2+版本中启用health_check实现主动健康检查。

要让 Nginx 高效代理后端 API 集群的 TCP 流量(比如 gRPC、自定义二进制协议、长连接 WebSocket 后端、或直连的 Node.js/Go 服务),关键不是照搬 HTTP 反向代理配置,而是用对 stream 模块,并围绕连接生命周期、健康探测和调度策略做针对性设计。
启用并验证 stream 模块
Nginx 默认不编译 stream 模块。安装或升级时必须显式加入:--with-stream --with-stream_ssl_module(如需 TLS 终止或透传)。
装好后执行 nginx -V 2>&1 | grep -o with-stream,有输出才表示启用成功。
定义上游集群与连接控制
在 nginx.conf 的顶层(与 http 块同级)添加 stream 块:
upstream api_backend {
server 10.10.1.10:3001 weight=3 max_fails=2 fail_timeout=15s;
server 10.10.1.11:3001 weight=2;
server 10.10.1.12:3001 backup;
keepalive 64;
}
- weight 按后端实例 CPU 和内存比例设置,避免某台过载
- max_fails/fail_timeout 控制故障剔除节奏:失败 2 次后 15 秒内不再派发新连接
- backup 仅在全部主节点不可用时启用,适合灾备切换
- keepalive 64 表示每个 worker 进程最多复用 64 个空闲到后端的 TCP 连接,减少 TIME_WAIT 和建连开销
监听与代理行为调优
server {
listen 8443 so_keepalive=on;
proxy_pass api_backend;
proxy_connect_timeout 2s;
proxy_timeout 60s;
proxy_responses 1;
proxy_buffer_size 4k;
}
- so_keepalive=on 启用系统级 TCP 心跳,及时发现断连
- proxy_connect_timeout 设为 1–3 秒,避免因后端启动慢导致连接堆积
- proxy_timeout 应略大于 API 最长处理时间(如业务峰值 45s,则设 60s)
- proxy_responses 1 强制单请求单响应模式,适配 RPC 类协议,防止粘包误判
- proxy_buffer_size 缓冲区不宜过大(通常 4k–16k),避免小包延迟累积
主动健康检查(Nginx Plus 或开源版 1.25.2+)
基础版 Nginx 的 stream 不支持主动探活,但可通过以下方式补强:
- 用
tcp_check脚本 + systemd timer 定期探测端口,配合nginx -s reload动态更新 upstream(需配置文件生成工具) - 升级到 Nginx 开源版 1.25.2+,启用
health_check指令:
health_check interval=5s fails=3 passes=2; - 若后端支持简单握手(如发送
PING收PONG),可配合match块做协议级检测
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











