必须在源码编译阶段显式添加--with-http_sub_module参数启用,不支持动态加载;通过nginx -v检查是否已编译该模块,未启用则需下载同版本源码、安装依赖、复用原配置参数并追加该选项后重新编译安装。

启用 ngx_http_sub_module(即 Sub 模块)必须在 Nginx 源码编译阶段显式加入,它**不是默认启用的模块**,也不能通过动态加载方式添加(该模块不支持 --with-dynamic-module)。你需要重新编译 Nginx,并在 ./configure 中加上 --with-http_sub_module 参数。
确认当前 Nginx 是否已含 Sub 模块
执行以下命令:
nginx -V 2>&1 | grep -o "--with-http_sub_module"
若无输出,说明未启用。同时检查 nginx -V 输出中的 configure arguments,这是后续复用的关键依据。
准备匹配版本的源码与依赖
- 从 nginx.org 下载与当前运行版本完全一致的源码包(如线上是 1.26.1,就下
nginx-1.26.1.tar.gz) - 安装基础编译依赖(以主流系统为例):
- Debian/Ubuntu:
apt install build-essential libpcre3-dev zlib1g-dev libssl-dev - RHEL/CentOS:
yum install gcc pcre-devel zlib-devel openssl-devel
- Debian/Ubuntu:
配置并编译(保留原有功能 + 新增 sub)
进入解压后的 Nginx 源码目录,复用原 configure 参数,并追加 --with-http_sub_module:
./configure \ --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --with-http_sub_module # ← 关键:显式启用 Sub 模块
然后执行:
make sudo make install
⚠️ 注意:不要跳过 make 直接 make install;若担心覆盖,可先 make,再手动替换二进制文件(见下条)。
安全升级与验证
- 备份原 nginx 二进制:
sudo mv /usr/sbin/nginx /usr/sbin/nginx.bak - 复制新编译的程序:
sudo cp objs/nginx /usr/sbin/nginx - 语法检查:
nginx -t(必须成功) - 重载配置:
nginx -s reload - 验证模块生效:
nginx -V 2>&1 | grep sub应有输出;也可在配置中使用sub_filter指令测试是否报错











