nginx 集成 ModSecurity 是什么
开源方案里常见做法是把 ModSecurity 通过 ngx_http_modsecurity_module 模块嵌入 nginx:nginx 负责接入与转发,ModSecurity 负责在请求与响应上执行规则。前提是 nginx 编译或安装了该模块——很多发行版默认包不含它,需要额外安装或用动态模块方式加载。集成后的工作分三块:加载模块、启用并指定规则文件、验证请求被规则命中。
基本信息
| 前提条件 | nginx 需带 ModSecurity 模块,或支持动态加载 .so 模块 |
|---|---|
| 配置位置 | 主配置文件加载模块,server 或 location 段启用与指定规则文件 |
| 规则来源 | OWASP CRS 等开源规则集,配合自定义规则文件 |
| 生效方式 | 修改配置或规则后重载 nginx |
| 性能考虑 | 请求体检测与正则匹配会带来额外开销 |
典型使用场景
- 中小站点自建开源 WAF,替代或补充商业 WAF
- 已有 nginx 反向代理架构,直接在链路上加检测
- 测试环境验证规则集与业务的兼容性
- 自定义规则开发与调试:本地验证 SecRule 写法
- 故障排查:确认请求被拦是否由 ModSecurity 规则引起
- 性能评估:开启检测前后对比响应时间与吞吐
nginx 配置示例
nginx 配置示例
# 加载模块(版本与路径按实际安装情况填写)
load_module modules/ngx_http_modsecurity_module.so;
server {
listen 443 ssl;
# 启用 ModSecurity 并指定规则入口文件
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
location / {
proxy_pass http://backend;
}
}
# 修改后用 nginx -t 检查语法,再重载服务集成检查项
| 检查项 | 正常表现 | 异常表现 |
|---|---|---|
| 模块加载 | nginx -V 或配置无报错 | 启动时报未知指令错误 |
| 规则文件 | worker 进程可读 | 启动失败或规则不生效 |
| 启用范围 | 指定 server 或 location 生效 | 部分站点未启用检测 |
| 日志输出 | 审计日志与错误日志有记录 | 命中规则但无日志 |
| 性能 | 响应时间变化在可接受范围 | 大文件上传或高频请求明显变慢 |
规则文件路径与权限要正确:nginx worker 进程需要可读权限,路径写错时通常表现为启动失败或规则完全不生效。
规则更新后需要重载 nginx 才会生效,只在磁盘上替换文件而不重载会造成「已经更新了」的错觉。