nginx集群需分层安全防护:入口统一收敛至waf/slb,节点轻量执行基线控制,redis实现跨节点协同限流与封禁,配置全生命周期git化管理并定期红蓝对抗验证。

Nginx 集群本身不内置集群级防火墙功能,安全防护必须分层设计:入口统一收敛、策略集中下发、节点轻量执行、日志统一归集。单靠复制配置或只在每台 Nginx 上加几条 deny 规则,无法应对扫描、CC、横向穿透等真实攻击。
在集群入口部署独立 WAF 或 SLB 做第一道过滤
所有公网流量禁止直连 Nginx 节点,必须先经过前置网关。这一步是架构安全的前提。
- 优先使用云厂商提供的托管 WAF(如阿里云WAF、腾讯云Web应用防火墙),开启 CRS 规则集,自动拦截 SQLi、XSS、路径遍历等通用攻击
- 若自建,可在 HAProxy 或专用 Nginx 实例上启用 ModSecurity(配合 OWASP CRS)或 Naxsi,完成请求清洗后再转发至后端 Nginx 集群
- 配置地理围栏、IP 黑名单、UA 指纹识别等策略,将恶意流量在边缘层阻断
- 确保健康检查、Prometheus 抓取、Ansible 运维通道全部走内网 VPC,公网 IP 不暴露任何 Nginx 节点
为每个 Nginx 节点配置最小化基线访问控制
节点层不承担复杂规则计算,只做轻量、确定性判断,避免因配置差异导致防护缺口。
- 禁用目录浏览:
autoindex off;全局关闭,尤其对/static/、/assets/等静态路径 - 限制 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$) { return 405; }放在 server 或 location 块中 - 敏感路径强制白名单:
location /api/admin/ { allow 10.10.20.0/24; deny all; },IP 段必须对应运维跳板机或堡垒机出口 - 隐藏版本号:
server_tokens off;,并移除默认错误页中的 Server 头字段
利用 Redis 实现跨节点动态协同防护
单节点限流或封禁在集群中无效,需共享状态才能形成合力。
- 用
ngx_http_limit_req_module+ Redis Lua 脚本,实现全集群统一登录接口限速(例如:每 IP 5 分钟最多 10 次失败) - 在
access_by_lua_block中读取 Redis 的实时黑名单(如高频扫描 IP、已确认恶意 UA),命中即return 403 - 将 access 日志通过 Filebeat 或 nginx-log-exporter 推送至 Loki,用 Grafana 设置告警规则(如 1 分钟内 500 错误突增 300%),触发自动同步黑名单到 Redis
确保配置变更可信且可追溯
人工改配置、临时调试、未验证上线,是线上安全最常见破口。
- 所有 Nginx 配置(含 WAF 规则、限流参数、白名单 IP)纳入 Git 仓库,走 Code Review + CI 自动语法校验(
nginx -t) - 合并后由 Argo CD 或 Ansible 自动部署,每次变更生成唯一 commit ID 和部署时间戳
- 每周运行一次配置一致性扫描脚本,比对各节点实际生效配置与 Git 主干是否一致
- 每月执行红蓝对抗测试:模拟扫描器、爆破工具、异常 UA 访问,验证防护链路是否完整生效











