requestreadtimeout是防御slowloris等慢速http攻击的核心机制,必须在服务器级上下文配置header=起始-总时长,minrate=字节数和body=参数,禁用directory块内配置,通过slowhttptest验证error_log中client denied记录。

Apache 的 RequestReadTimeout 指令不是可选优化项,而是防御慢速 HTTP 攻击(如 Slowloris、Slow Headers)的核心控制机制。它不依赖规则匹配或 IP 封禁,直接在传输层掐断异常节奏的连接,让攻击者无法靠“每 10 秒发一个换行符”耗尽 worker 进程。
必须放在服务器级上下文
该指令只在以下位置生效:
— 全局 server config(httpd.conf 最外层)
—
— .htaccess(需 AllowOverride Limit)
不能写在
常见错误是把它嵌套进权限控制块里,结果配置加载成功但完全不触发。
header= 要设双阶段 + 速率兜底
针对“只发 GET / 就停住”的头部慢速攻击,单设一个固定超时没用。必须用 header=起始-总时长,minrate=字节数 格式:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 起始时间(如 10):客户端必须在 10 秒内发出第一个请求头字节,否则立即断连
- 总时长(如 40):从首字节开始,整个请求头必须在 40 秒内收完
- minrate=500:任意连续 2 秒内至少传入 1000 字节(500 × 2),低于即断
HTTPS 站点建议调高起始值(如 header=20-40),避免 TLS 握手延迟被误判为攻击。
body= 参数绝不能省略
只防 header 不防 body,等于留后门。攻击者可构造 Content-Length: 1000000 后逐字节发体,绕过头部限制:
- body=10,minrate=500:每 10 秒内至少收到 500 字节请求体,否则断连
- 对上传接口等合法慢传场景,可用
单独覆盖更宽松值(如 body=60,minrate=100) - 不写 body= 参数,该阶段就完全不受控——这是防护失效最常见原因
验证是否真起效
配完不测试 = 白配。curl -v 一次性发完全部头,根本测不出效果:
- 用 slowhttptest 模拟真实攻击:
slowhttptest -c 1 -t GET -u http://x/ -i 15 -r 1(每 15 秒发 1 字节) - 检查 error_log 是否出现
[reqtimeout:info] ... client denied by server configuration - 确认 LogLevel 至少为 info,且看的是 error_log,不是 access_log
- 重启后运行
apachectl -M | grep reqtimeout确保模块已加载










