必须显式编译启用--with-stream模块才能支持tcp/udp四层代理,该模块自1.9.0起内置但默认不编译;执行nginx -v | grep with-stream验证,无输出则需基于原configure参数追加--with-stream重新编译并平滑升级。

编译 Nginx 时开启 --with-stream 是启用四层(TCP/UDP)代理能力的必要步骤。该模块从 1.9.0 版本起内置,但默认不编译进二进制文件,必须显式指定。
确认当前是否已支持 stream 模块
执行以下命令检查:
nginx -V 2>&1 | grep -o with-stream若有输出 with-stream,说明已启用;若无输出,则需重新编译添加。
获取原编译参数并追加 --with-stream
先查清当前 Nginx 的完整 configure 命令,避免遗漏依赖模块:
nginx -V输出中 configure arguments: 后的内容即为原始参数。复制该行,在末尾加上 --with-stream(如已有 SSL 支持,还可加 --with-stream_ssl_module 启用 TLS 代理)。
源码编译流程(平滑升级推荐)
- 进入 Nginx 源码目录(如 /usr/local/src/nginx-1.24.0)
- 运行修改后的 configure 命令(保持 prefix、user、模块等与原安装一致)
- 执行 make(⚠️不要运行 make install,会覆盖配置和目录)
- 备份原 nginx 二进制文件:cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
- 替换二进制:cp objs/nginx /usr/local/nginx/sbin/nginx
- 测试配置并重载:nginx -t && nginx -s reload
常见错误与避坑提示
- nginx: [emerg] unknown directive "stream":不是配置写错,是模块根本没编译进去
- stream 块必须与 http 块同级,放在 events 块之后、http 块之外;写在 http 内部会直接报错
- Debian/Ubuntu 用户可跳过编译,改用 apt install nginx-full(含 stream 支持)
- CentOS/RHEL 若用 EPEL 或官方 nginx.org 包,通常已默认启用 --with-stream











