Nginx stream 模块原生支持加权轮询,需启用 with-stream 编译选项,在 stream{} 块中定义 upstream 并为 server 设置 weight 整数值,通过 proxy_pass 引用实现连接级负载均衡。

直接在 stream 块中用 upstream 定义后端组,通过 weight 参数指定各节点权重即可实现加权轮询。它不依赖额外模块——stream_upstream_module 并非独立模块,而是 Nginx stream 模块内置的 upstream 功能部分。
确认 stream 模块已启用
加权轮询的前提是 Nginx 已编译并启用了 stream 模块:
- 运行
nginx -V 2>&1 | grep -o with-stream,输出含with-stream才表示支持 - 若无输出,需重新编译:添加
--with-stream(及可选--with-stream_ssl_module)参数 - 注意:
stream是与http同级的顶级块,不能写在http{}内部
配置加权轮询 upstream 组
在 stream{} 块中定义 upstream,为每个 server 显式设置 weight 值(默认为 1):
- 权重数值为整数,越大代表分配连接概率越高
- 所有节点必须指定完整地址(IP:PORT),端口不可省略
- 支持健康检查参数,如
max_fails=3 fail_timeout=30s,故障时自动摘除
示例:
stream {
upstream app_backend {
server 192.168.5.10:9501 weight=3;
server 192.168.5.11:9501 weight=1;
server 192.168.5.12:9501 weight=2;
}
}
绑定监听端口并启用代理
用 server 块监听客户端请求端口,并通过 proxy_pass 指向 upstream 名称:
-
listen指令指定对外暴露的 TCP 端口(如listen 8443;) -
proxy_pass必须引用已定义的 upstream 名称,不能写 IP 或域名 - 建议设置
proxy_timeout(如proxy_timeout 1h;)适配长连接场景
完整片段示例:
stream {
upstream app_backend {
server 192.168.5.10:9501 weight=3;
server 192.168.5.11:9501 weight=1;
server 192.168.5.12:9501 weight=2;
}
server {
listen 8443;
proxy_pass app_backend;
proxy_timeout 1h;
proxy_responses 1;
}
}
验证与注意事项
配置完成后需重载生效,并关注实际分发效果:
- 执行
nginx -t检查语法,再nginx -s reload生效 - 加权轮询按连接粒度生效——每个新 TCP 连接按权重比例分配,不是按请求或包
- 不支持会话保持(如基于 cookie 或 path),如需固定后端,改用
hash $remote_addr - 不解析应用层协议,因此无法做 TLS 卸载;加密流量只能透传


















