配置 nginx stream 模块做 tcp 代理的核心三步是:确认模块可用(执行 nginx -v | grep with-stream)、正确编写顶层 stream 块(与 http 同级,不可嵌套)、重载配置并测试连通性;它工作在传输层,不解析 http,不支持 rewrite 或 header 修改。

配置 Nginx Stream 模块做 TCP 代理,核心就三步:确认模块可用、写对配置结构、验证生效。它不走 HTTP 流程,所以不能套用 server 块在 http 里的写法。
确认 Stream 模块已启用
执行命令检查:
输出含 with-stream 才能继续。若无输出,说明当前 Nginx 未编译该模块,需重新编译并添加 --with-stream 参数,或换用官方预编译包(如 nginx.org 提供的 stable 版)。Ubuntu/Debian 用户可尝试安装 nginx-full 包替代默认版本。
在顶层添加 stream 块
打开主配置文件(如 /etc/nginx/nginx.conf),确保 stream { } 块与 http { } 块同级,**不能嵌套在 http 内**。最简结构如下:
- 定义一个 upstream 组,列出后端地址和端口
- 用 server 块监听对外端口,并通过 proxy_pass 指向 upstream 名
示例(代理 MySQL 到两个后端):
stream {upstream mysql_cluster {
server 192.168.1.10:3306;
server 192.168.1.11:3306;
}
server {
listen 3307;
proxy_pass mysql_cluster;
}
}
重载配置并测试连通性
保存配置后,先语法检查:
- nginx -t —— 确保无报错
- nginx -s reload —— 平滑重载配置
然后从客户端连接 Nginx 监听端口(如 mysql -h nginx_ip -P 3307 -u user -p),观察是否能正常建立连接并完成业务交互。注意防火墙需放行监听端口,且后端服务本身必须可被 Nginx 主机直接访问。











