nginx源码集成第三方防爬与安全模块需严格按四步执行:一、安装gcc、pcre-devel等编译依赖及启用官方安全模块;二、下载验证兼容的模块(如ngx_waf、headers-more);三、configure中用绝对路径精准添加--add-module=;四、通过nginx -v和运行时配置验证生效。

一、提前装好编译依赖和基础安全模块
没有这些,连 `./configure` 都会报错,更别说加载第三方模块:
- 必须安装的开发库:gcc、make、pcre-devel、zlib-devel、openssl-devel(HTTPS 和正则匹配必需)
-
推荐启用的官方安全模块(写进 configure 命令里):
--with-http_ssl_module、--with-http_v2_module、--with-http_realip_module、--with-http_stub_status_module -
创建非 root 用户运行 Nginx:如
useradd -M -s /sbin/nologin nginx,避免提权风险
二、下载并验证你要集成的第三方模块
不是所有模块都兼容当前 Nginx 版本,尤其注意模块维护状态和 Nginx 主版本匹配:
-
常见防爬/安全模块示例:
-
ngx_waf(Web 应用防火墙,支持规则拦截 SQLi/XSS/扫描行为) -
headers-more-nginx-module(隐藏 Server 头、自定义响应头) -
ngx_brotli(Brotli 压缩,减小传输体积,间接提升抗 CC 效率) -
nginx-sticky-module(会话保持,配合限速防绕过)
-
-
下载方式统一建议:用 git clone 到固定路径(如
/usr/src/nginx-modules/ngx_waf),避免路径含空格或中文 - 检查模块 README:确认是否需额外 patch 或指定 Nginx 版本(例如某些老模块不支持 1.25+)
三、配置命令中精准追加 --add-module=
关键点:模块路径必须是绝对路径,且指向模块源码根目录(含 config 文件);多个模块可重复使用该参数:
./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --add-module=/usr/src/nginx-modules/ngx_waf \ --add-module=/usr/src/nginx-modules/headers-more-nginx-module \ --add-module=/usr/src/nginx-modules/ngx_brotli
⚠️ 注意:如果模块依赖其他库(如 ngx_waf 依赖 libmaxminddb 做 GeoIP),需先编译安装对应库,并在 configure 中加 --with-ld-opt="-L/path/to/lib"。
四、编译安装后验证模块是否生效
光 make && make install 不代表模块真的可用:
- 执行
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o with-http_.*-module,看输出是否含你加的模块名(如with-http-waf-module) - 启动 Nginx 后,访问
http://your-server/nginx-status(需开启 stub_status),或用curl -I your-domain检查 Server 头是否被 headers-more 修改 - 对 ngx_waf 等模块,还需在
nginx.conf中显式启用,例如加waf on;和规则路径配置,否则只是“编译进去了”,没启用
--add-module=,而是每一步都踩准前提条件。











