nginx无法单独抵御大规模流量型ddos,但可高效防御http flood等应用层攻击,需结合云清洗服务;其三大原生防护模块为:限制单ip并发连接数、请求速率及强化协议合规性。

限制单 IP 并发连接数(防连接耗尽)
用 limit_conn_module 控制每个客户端同时打开的 TCP 连接数,避免 SYN/FIN 慢攻击或大量短连接打满服务器 fd 资源。
- 在
http块中定义连接统计区域:limit_conn_zone $binary_remote_addr zone=perip:10m; - 在关键 location(如 API 或登录入口)启用限制:
limit_conn perip 15;(建议值:静态资源可放宽至 50+,API 接口建议 5–20) - 补充日志与状态码提升可观测性:
limit_conn_log_level warn;limit_conn_status 429;(返回 429 而非默认 503,更符合 REST 语义)
限制单 IP 请求速率(防 CC/HTTP Flood)
用 limit_req_module 实现漏桶限流,对高频请求进行平滑拦截或丢弃,适用于首页、搜索、登录等易被刷的路径。
- 定义请求计数区域:
limit_req_zone $binary_remote_addr zone=req_perip:10m rate=8r/s;(每秒 8 个请求是较保守起点) - 在 location 中应用策略:
limit_req zone=req_perip burst=16 nodelay;
其中burst=16允许短时突发,nodelay表示不排队,超限立即拒绝 - 注意:对含大量静态资源的页面(如 HTML 引用 30 个 JS/CSS),应避开静态后缀路径,只限业务接口,例如:
location ~ ^/(api|login|search) { ... }
强化协议合规性(防畸形请求与慢速攻击)
利用 Nginx 内置指令提前拦截非法或低效请求,减少内核与 worker 进程负担。
- 仅允许标准 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE|OPTIONS)$) { return 444; }
(444是 Nginx 特有“关闭连接不响应”,比 405 更轻量) - 收紧请求头大小限制,防 header overflow 攻击:
client_header_buffer_size 2k;large_client_header_buffers 4 4k; - 设置合理超时,避免 slowloris 类攻击:
client_header_timeout 5;client_body_timeout 10;send_timeout 10;











