主流手段包括:使用 limit_conn 模块限制单 IP 并发连接数,防止连接耗尽型攻击;通过 limit_req 配合漏桶算法控制请求速率,抵御 HTTP Flood;启用 ngx_http_vhost_traffic_status_module 等监控模块实时观测流量异常;配合 iptables 或 fail2ban 对高频恶意源进行封禁。
主题锚点句
本文讨论基于 Nginx 原生模块与常见扩展的 DDoS 缓解策略,不涉及专用硬件或第三方代理层(如 CDN)的全局清洗能力。
此类配置对应用层 Flood 有一定压制作用,但无法识别加密流量中的恶意行为,且在 SYN Flood 或 UDP Flood 场景下无效——这些需依赖内核参数(如 syncookies)或网络层设备。
生产环境中建议将 keepalive_timeout 设置为 15–30 秒,并启用 keepalive_requests 限制长连接请求数,平衡性能与资源占用。
若自建集群,可集成 Prometheus + Grafana 监控请求速率突增,触发 Alertmanager 调用脚本动态更新 geoip-blocking 规则,实现简易响应闭环。
| 维度 | 参考标准 | 工程师建议 |
|---|---|---|
| 并发连接限制 | limit_conn_zone + limit_conn | 按业务峰值设定阈值,避免误杀爬虫或移动端用户 |
| 请求频率控制 | limit_req_zone + burst | 区分静态资源与动态接口,后者应更严格 |
| 日志分析辅助 | 结合 ELK 分析 access.log | 识别高频 UA、无 Referer 请求模式 |
| 纵深防御 | CA/B Forum DDoS Mitigation Best Practices | Nginx 仅作边缘补充,主防依赖网络层与云服务 |
Q:limit_req 中的 burst 参数有什么风险?
A:过大的 burst 值可能导致瞬时洪峰穿透,建议结合 nodelay 使用时谨慎评估,避免将压力转移至后端应用服务器。
Q:是否推荐使用第三方模块如 ngx_lua_waf?
A:Lua 模块灵活性高,可用于实现复杂规则匹配,但从维护性和性能开销来看,生产环境优先考虑稳定性,建议在测试验证充分后再上线。
加密您的网站,赢得客户信任!