一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx 中如何在 nginx.conf 中配置防范慢攻击的超时参数

时间:2026-08-22 20:39:49 编辑:袖梨 来源:一聚教程网

防范慢速攻击的关键是快速识别并切断异常连接,需在http块统一配置client_header_timeout(公网7s/内网3–5s)、client_body_timeout与send_timeout(各10s)、keepalive_timeout(5–8s)等超时参数,并启用reset_timedout_connection、limit_conn、ssl_handshake_timeout等配套措施。

防范慢速攻击的关键不是让 Nginx 等得更久,而是让它在不同阶段快速识别“只连不发、发得极慢、发不完”的异常连接,并立即切断。所有防护参数必须放在 http { } 块中(全局生效),部分可细化到 serverlocation,但超时类指令优先在 http 层统一设防。

第一道闸门:限制请求头接收时间

client_header_timeout 是防御 Slowloris 的核心——从客户端发第一个字节起计时,到完整收到 rnrn 为止。超时即返回 408,不进后端、不占 upstream 资源。

  1. 公网 Web/API 入口:设为 7s,兼顾跨境延迟与拦截窗口
  2. 内网服务(如 K8s Ingress 后置):可压至 3–5s
  3. 含 JWT、多段 Cookie 或 SSO 头的鉴权网关:先用 log_format 记录 $request_time,观察 P99 头部接收耗时,再加 2–3 秒缓冲,上限不超过 15s

卡住请求体与响应发送的空闲间隔

client_body_timeoutsend_timeout 不看总耗时,只盯“两次数据到达之间停了多久”。攻击者靠低速率+长空闲维持连接,这两个参数就是精准计时器。

  1. client_body_timeout 10s:POST/PUT 请求体上传时,两次 TCP 包间隔超过 10 秒就断连
  2. send_timeout 10s:Nginx 往客户端发响应时,两次写操作间隔超 10 秒即中断(流式响应如 SSE 可调高至 300s,并配 proxy_buffering off
  3. 文件上传类服务:可放宽 client_body_timeout 至 300s,但必须同步设 client_max_body_size 100m 防恶意大声明

清掉僵尸长连接

keepalive_timeout 控制空闲长连接存活时间。默认 75 秒极易堆积大量 TIME_WAIT,填满连接表。

  1. 对外服务建议设为 5–8s
  2. 必须搭配 reset_timedout_connection on;:超时后直接发 RST 包,跳过四次挥手,立刻释放 socket 和文件句柄
  3. 若使用 upstream,还需同步设 proxy_read_timeout 15–30s,防止后端响应慢拖住上游连接

配套加固动作不能少

单设超时效果有限,必须形成闭环:

  1. limit_conn_zone $binary_remote_addr zone=perip:10m; + limit_conn perip 10;:限制单 IP 初始并发连接数,防多地址绕过
  2. client_header_buffer_size 4k; + large_client_header_buffers 4 16k;:确保能容纳合法大 header(如长 Token),避免因缓冲不足触发重试延长等待
  3. ssl_handshake_timeout 5s;(Nginx 1.19.0+):强制 TLS 握手在 5 秒内完成,拦截畸形或拖慢握手的客户端

热门栏目