源码安装Nginx时添加第三方模块本质是静态编译集成,需在configure阶段用--add-module=指定绝对路径的模块源码目录,确保模块兼容Nginx版本及依赖库已预装,并通过nginx -V和功能测试验证生效。

源码安装 Nginx 时添加第三方扩展模块,本质是把模块代码“编译进”最终的 nginx 二进制文件里,不是装完再加。关键在 configure 阶段用 --add-module= 指向模块源码目录,且路径必须是绝对路径、模块本身要兼容当前 Nginx 版本。
一、先配好系统和编译环境
没这些基础,configure 直接失败:
- 装开发工具链:CentOS/RHEL 用
yum groupinstall "Development Tools",Ubuntu/Debian 用apt-get install build-essential - 装核心依赖库:
pcre-devel(重写规则)、zlib-devel(gzip)、openssl-devel(HTTPS) - 创建专用运行用户,比如
useradd -r -s /sbin/nologin nginx,避免 root 运行风险
二、下载并确认模块可用性
别直接 git clone 到桌面或带空格路径,统一放固定位置,例如 /usr/src/nginx-modules/:
- 常见安全类模块:ngx_waf(WAF 规则拦截)、headers-more-nginx-module(隐藏 Server 头)
- 功能增强类:ngx_brotli(Brotli 压缩)、nginx-sticky-module(会话保持)
- 务必检查模块 README 或 issue 区:是否支持你准备编译的 Nginx 版本(如 1.24.x 或 1.25.x),有些老模块不兼容新版
三、configure 命令里精准加模块
进入解压后的 Nginx 源码目录(如 /usr/src/nginx-1.25.3),执行 configure,并用 --add-module= 逐个指定模块路径:
- 每个路径必须是绝对路径,且指向模块源码根目录(里面要有
config文件) - 多个模块就重复写多次
--add-module=,顺序无关 - 示例片段:
--add-module=/usr/src/nginx-modules/ngx_waf \<br>--add-module=/usr/src/nginx-modules/headers-more-nginx-module
- 如果模块依赖外部库(如 ngx_waf 要 libmaxminddb),得先编译安装该库,并在 configure 中加
--with-ld-opt="-L/your/lib/path"
四、验证是否真正生效
编译安装完成后不能只看有没有报错,要实测:
- 运行
nginx -V 2>&1 | grep -o with-http_.*_module,确认输出里有对应模块名(如with-http_lua_module) - 在
nginx.conf里启用模块提供的指令(如more_set_headers "X-Served-By: nginx"),然后 reload 并 curl 测试响应头 - 若模块提供状态页或日志标记(如 ngx_waf 的拦截日志),可触发规则看是否记录
不复杂但容易忽略


















