关键是在编译时添加--with-stream参数,配置中stream块须与http同级且独立,启动前用nginx -V和nginx -t验证模块加载与语法正确性。

要让 Nginx 源码安装后支持 stream 四层负载均衡,关键不是装完就用,而是编译时显式启用模块、配置结构严格合规、运行前验证到位。整个过程分三步:编译阶段加参数、配置文件放对位置、启动前确认生效。
编译时必须带上 --with-stream
stream 模块默认不编译进 Nginx,源码安装必须主动开启:
- 执行 ./configure 命令时,务必添加 --with-stream 参数(可同时加 --with-stream_ssl_module 支持 TLS 透传)
- 如果已有旧版 Nginx,无需重装全部——只需在相同源码目录下重新 configure + make(不要 make install),再用新生成的 nginx 二进制文件替换旧的
- 注意:make 后不要直接 make install,避免覆盖原有配置和路径;建议先备份原 nginx 二进制,再 cp objs/nginx /usr/sbin/nginx 或对应路径
配置文件必须放在顶层 context
stream 块不能嵌套在 http 或 events 里,必须与它们同级:
- 在 /etc/nginx/nginx.conf 中,events 块之后、http 块之前,新增独立的 stream { ... } 块
- 推荐拆分管理:在 main 配置末尾加 include /etc/nginx/stream.d/*.conf;,把具体 upstream 和 server 写到单独文件里
- 若写错位置(比如塞进 http{}),Nginx 启动会报错:unknown directive "stream"
验证是否真正可用
光配置对还不行,得确认模块已加载且语法无误:
- 执行 nginx -V 2>&1 | grep -o with-stream,输出 with-stream 表示编译成功
- 执行 nginx -t 检查配置语法,特别留意 stream 块内是否有非法指令(如 rewrite、proxy_set_header 等七层指令)
- 启动后,用 ss -tuln | grep :53(或你监听的端口)确认 Nginx 是否真正 bind 成功


















