需确认 Nginx 已编译 with-stream 模块(nginx -V | grep with-stream),并在 nginx.conf 顶层独立配置 stream 块(不可嵌套于 http 等块内),其中定义 upstream 和 server,用 proxy_pass 转发至后端,最后通过 nginx -t 和 -s reload 验证生效。

要开启 ngx_stream_core_module 实现 Nginx 的四层(TCP/UDP)负载均衡,核心是确认模块已编译进 Nginx 并在配置中启用 stream 上下文。该模块自 Nginx 1.9.0 起默认内置,但需注意:它**不随 HTTP 模块自动加载**,必须显式启用且配置独立于 http 块。
确认模块是否可用
运行以下命令检查 Nginx 是否包含 stream 模块:
nginx -V 2>&1 | grep -o with-stream若输出含 with-stream,说明编译时已启用。若无,需重新编译 Nginx 并添加 --with-stream 参数(生产环境建议使用官方预编译包或主流发行版仓库提供的版本,通常已启用)。
启用 stream 全局配置
在主配置文件(如 /etc/nginx/nginx.conf)的顶层(即 http 块之外),添加 stream 块:
- 不能嵌套在
http、events或其他块内 - 通常放在
events块之后、http块之前 - 支持全局指令如
worker_processes、error_log,也可在stream块内单独设置
配置 TCP/UDP 负载均衡实例
在 stream 块中定义 upstream 和 server:
-
定义上游服务器组:用
upstream声明后端服务,支持least_conn、hash $remote_addr等简单调度策略(不支持 HTTP 模块中的复杂 health check,但可配合health_check指令用于 TCP 连通性探测) -
监听并转发流量:用
server块指定监听地址和端口,通过proxy_pass指向 upstream 名称(注意:此处proxy_pass后不带 URI,仅写 upstream 名) -
示例(TCP 转发至 Redis 集群):
stream { upstream redis_backend { hash $remote_addr consistent; server 192.168.1.10:6379 max_fails=3 fail_timeout=30s; server 192.168.1.11:6379 max_fails=3 fail_timeout=30s; } server { listen 6379; proxy_pass redis_backend; proxy_timeout 1s; proxy_responses 1; } }
验证与重载配置
执行以下步骤确保生效:
- 语法检查:
nginx -t—— 必须提示 “syntax is ok” 且 “test is successful” - 重载配置:
nginx -s reload(避免中断已有连接) - 验证监听:
ss -tlnp | grep :6379或netstat -tlnp | grep :6379,确认 Nginx 正在监听对应端口 - 测试连通性:用
telnet或nc连接该端口,观察是否能透传到后端服务











