Nginx Stream模块专用于四层TCP/UDP转发,不解析应用层协议,适用于MySQL、Redis等场景;需确认启用--with-stream、配置置于顶层stream块、合理设置proxy_timeout等参数。

Nginx 的 Stream 模块专用于四层(传输层)TCP/UDP 流量转发,不解析应用层协议,适合 MySQL、Redis、SSH 等非 HTTP 场景。配置关键在于模块启用、位置正确、结构清晰和参数合理。
确认 stream 模块已编译启用
- 运行
nginx -V 2>&1 | grep with-stream,输出含--with-stream表示支持 - 若无输出,需重新编译 Nginx 并添加
--with-stream参数(Ubuntu 22.04+ 官方包通常已内置) - 注意:部分环境还需
--with-stream_ssl_module(如需 TLS 终止或 SNI 路由)
配置必须放在顶层作用域,不能嵌套在 http 块内
- 在
/etc/nginx/nginx.conf主配置文件中,与http、events同级添加:stream { include /etc/nginx/stream.d/*.conf; } - 推荐将具体规则拆分到独立文件(如
/etc/nginx/stream.d/mysql.conf),便于维护
基础 TCP 代理配置结构
每个 .conf 文件包含 upstream 和 server 块:
-
upstream定义后端服务地址(支持多节点、权重、健康检查) -
server块监听端口并转发,例如:upstream mysql_backend { server 192.168.1.100:3306; }
server { listen 3307; proxy_pass mysql_backend; proxy_timeout 30s; }
- `listen` 可加 `ssl`(需 `stream_ssl_module`)、`udp` 或 `so_keepalive` 等修饰 <strong>常用控制参数与调优建议</strong> - `proxy_timeout`:客户端空闲超时,默认 6s;长连接建议设为业务最大空闲时间(如 `1h`) - `so_keepalive=300s:15s:4`:启用 TCP keepalive,适配 NAT 设备超时(5 分钟后探测,15 秒间隔,4 次失败断连) - `proxy_buffer_size 256k`:对大响应(如 mysqldump)可调高,避免截断或重传 - `proxy_responses 1`:收到首个响应即确认建连成功,提升连接可靠性 - `max_fails=3 fail_timeout=30s`:配合 upstream 使用,实现被动健康检查 不复杂但容易忽略。


















