动态模块集成允许Nginx运行时加载新功能而无需停机或重编译,要求版本≥1.9.11且编译含--with-compat;需匹配源码版本编译.so文件,通过load_module指令加载并reload生效,支持秒级启停、升级与回滚。

直接在运行中的 Nginx 上加载新功能,不用停机、不重编译主程序——这就是动态模块集成的核心价值。它特别适合需要快速响应业务变化、又不能容忍服务中断的场景,比如电商大促前加 HTTPS 代理,或灰度上线新压缩算法。
确认基础支持条件
动态模块不是所有 Nginx 都能用。关键看两点:
- Nginx 版本必须 ≥ 1.9.11(2015 年起正式支持);可通过
nginx -v查看版本 - 当前 Nginx 二进制需含
--with-compat编译选项;执行nginx -V(大写 V),在输出中查找该参数。若无,说明是纯静态编译版,需重新编译或换用官方预编译包(如 nginx.org 提供的 mainline 或 stable 包,已默认启用兼容性)
编译并生成 .so 模块文件
模块源码不能直接用,必须针对你当前 Nginx 的版本和编译环境单独编译成动态链接库:
- 下载与线上 Nginx 完全一致版本号 的源码(例如线上是 1.21.6,就下 nginx-1.21.6.tar.gz)
- 下载目标模块源码(如
ngx_http_proxy_connect_module或ngx_brotli),注意其 README 是否要求特定 NDK 版本 - 进入 Nginx 源码目录,用
--add-dynamic-module=路径而非--add-module配置:./configure --with-compat --add-dynamic-module=../ngx_brotli - 执行
make modules(不是make && make install),生成的.so文件在objs/目录下
加载与验证模块
模块文件准备好后,只需配置+重载,无需重启:
- 将
.so文件复制到统一模块目录(如/usr/lib/nginx/modules/或/etc/nginx/modules/),确保 Nginx 主进程有读权限 - 在
nginx.conf的最顶层(events块之前)添加加载指令:load_module modules/ngx_http_brotli_filter_module.so; - 检查语法:
nginx -t。若提示 “module not found”,常见原因是路径错误、权限不足,或模块与 Nginx 版本/架构(x86_64 vs aarch64)不匹配 - 语法通过后,执行
nginx -s reload生效。此时模块已注入,可按其文档启用对应指令(如brotli on;)
卸载与迭代更简单
动态模块的优势在运维阶段更明显:
- 停用模块:注释或删除
load_module行,再nginx -s reload即可,原功能立即失效,不影响其他配置 - 升级模块:编译新版
.so,替换旧文件,reload 即完成热更新 - 回滚操作:保留上一版
.so文件,出问题时秒级切回


















