Nginx Stream模块可构建企业级四层内网穿透与中转网关,支持TCP/UDP转发、upstream负载均衡、安全加固及连接调优。需确认启用--with-stream,stream块须与http同级;支持backup、weight、proxy_timeout等参数实现容灾与性能优化。

用 Nginx Stream 模块构建企业级内网穿透与中转加速网关,核心是把 Nginx 从 HTTP 服务器升级为四层 TCP/UDP 流量调度中枢。它不解析业务协议,只做高性能、低延迟的原始字节流转发,天然适配数据库、SSH、Kafka、自定义服务等非 HTTP 场景。
确认并启用 Stream 模块
Stream 模块不是默认开启的,必须确认已编译支持:
- 执行 nginx -V 2>&1 | grep -o with-stream,有输出说明已启用;无输出需重新编译,添加 --with-stream 参数
- Ubuntu/Debian 用户可直接安装 nginx-full 包(含 Stream 支持);CentOS/RHEL 建议使用 nginx.org 官方源的 stable 版本
- 配置文件中不能将 stream 块写在 http {} 内,必须与 http 块同级,置于 nginx.conf 顶层
多实例负载均衡与故障转移
面向生产环境,单点后端不可靠,需通过 upstream 实现自动容灾:
基于 AIOZ Stream API 的免费音频上传技能,通过三步流程(Create → Upload Part → Complete)将本地音频文件上传至 AIOZ 流媒体平台。支持默认快速上传方式,使用默认编码配置,上传完成后返回 HLS 流媒体播放链接。使用 API Key (stream-publ...)进行认证。
- 定义 upstream 时可设置 max_fails=3 fail_timeout=30s,Nginx 会主动探测 TCP 连通性,连续失败后临时剔除节点
- 支持 backup 标记备用节点,主节点异常时自动切流;也支持 weight 实现加权轮询(如读写分离场景)
- 示例:代理两个 PostgreSQL 实例,一个主库 + 一个灾备库
upstream pg_cluster {
server 192.168.2.10:5432 weight=3;
server 192.168.2.11:5432 backup;
}
server {
listen 5433;
proxy_pass pg_cluster;
proxy_timeout 30s;
}
安全加固与访问控制
Stream 模块本身不提供用户认证,但可通过组合策略守住入口:
- 监听地址避免用 0.0.0.0:端口,改用具体公网 IP(如 203.0.113.5:3307),缩小暴露面
- 配合系统防火墙(ufw 或 iptables)限制源 IP:ufw allow from 198.51.100.20 to any port 3307
- 敏感服务(如 Redis、MySQL 管理端口)建议前置 SSH 隧道或 TLS 终止层,而非裸转发
- 如需鉴权,可搭配 auth_http 模块实现基于 HTTP 接口的连接级校验(需额外部署认证服务)
连接稳定性与性能调优
针对长连接、高吞吐或协议特殊性,需调整关键参数:
- proxy_timeout:设为业务最大空闲等待时间(如 1h),防止 NAT 设备或云厂商 SLB 主动断连
- proxy_responses 1:适用于请求-响应式协议(如 MySQL 登录握手),转发首个响应包即完成连接建立
- proxy_buffer_size 64k:对二进制日志流、大字段查询等场景,增大缓冲区减少拷贝开销
- proxy_bind $remote_addr transparent:多网卡环境可保留客户端真实源 IP(需 root 权限和路由配置配合)










