Nginx内置模块无法运行时启停,必须通过重新编译控制:执行nginx -V | grep "configure arguments"查看当前构建参数,用--with-xxx显式启用(如--with-http_ssl_module)、--without-xxx显式禁用(如--without-http_rewrite_module),再make clean、configure、make,最后替换二进制并验证。

Nginx 的内置模块不能在运行时启用或禁用——所有模块都是编译时静态链接进二进制文件的。所谓“管理模块”,实际是指重新编译 Nginx 时,通过 ./configure 参数显式控制哪些模块参与构建。
查看当前已启用的模块
执行命令确认现有编译配置:
nginx -V 2>&1 | grep "configure arguments"输出类似:
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --without-http_rewrite_module这一行就是你当前 Nginx 的真实构建逻辑,是后续调整的基准。
启用模块:用 --with-xxx
只有少数高级或非默认模块需要手动启用,常见包括:
-
--with-http_stub_status_module:开启状态页(/nginx_status) -
--with-http_realip_module:从 X-Forwarded-For 等头还原真实客户端 IP -
--with-http_ssl_module:必须启用 HTTPS(现代部署几乎必选) -
--with-http_v2_module:启用 HTTP/2 支持(需 OpenSSL 1.0.2+) -
--with-stream:启用四层 TCP/UDP 代理能力(如 MySQL、Redis 转发)
注意:--with-xxx 是“显式启用”,不写不代表关闭;很多基础模块(如 gzip、access、auth_basic)默认就开启。
禁用模块:用 --without-xxx
这是精简体积、降低内存和攻击面最有效的操作。常见安全可禁用项:
-
--without-http_autoindex_module:关掉目录列表页(避免暴露文件结构) -
--without-http_rewrite_module:移除 rewrite/if/return 指令(需确保配置中无相关语句) -
--without-http_proxy_module:不用反向代理时可禁(静态服务场景适用) -
--without-http_fastcgi_module:不跑 PHP-FPM 就禁用(Python/Node 场景可能不需要) -
--without-http_ssi_module:服务端包含功能,存在注入风险,基本不用 -
--without-mail和--without-stream:彻底排除邮件代理与四层转发代码
禁用后务必检查配置文件,删掉对应指令(如 rewrite、auth_basic),否则 nginx -t 会报错。
重新编译并替换二进制文件
步骤要严格按顺序执行:
- 进入 Nginx 源码目录,先运行
make clean清除旧对象文件 - 用完整
./configure ...命令(含原有参数 + 新增--with/--without) - 执行
make(不要make install,避免覆盖整个安装目录) - 备份原
nginx二进制:cp /usr/local/nginx/sbin/nginx{,.bak} - 复制新二进制:
cp objs/nginx /usr/local/nginx/sbin/ - 验证:
nginx -t→nginx -V→nginx -s reload
编译后可用 ls -lh $(which nginx) 对比体积变化,典型精简可减少 30%–40% 文件大小,worker 进程 RES 内存下降 2–6 MB。


















