apache默认timeout指令对慢速连接几乎无效,真正有效的是mod_reqtimeout模块:通过requestreadtimeout header=10-40,minrate=500和body=10-40,minrate=500分阶段限速超时,并需配合event mpm、缩短keepalive_timeout及限制maxrequestworkers协同防御。
apache 默认的 timeout 指令对慢速连接几乎无效,它只管请求头初始接收阶段,无法应对 slowloris、slow post 或 slow read 这类“挤牙膏式”攻击。真正起作用的是 mod_reqtimeout 模块——它通过分阶段限速和超时控制,在不同环节主动识别并切断异常连接,及时释放 worker 资源。
启用 mod_reqtimeout 模块
确认模块已加载,取消配置文件中对应行的注释:
LoadModule reqtimeout_module modules/mod_reqtimeout.so
若使用 event MPM(推荐),该模块效果最佳;prefork MPM 下仍有效,但资源回收效率略低。
配置 RequestReadTimeout 指令
在 <ifmodule reqtimeout_module></ifmodule> 块内设置 header 和 body 阶段的超时策略。关键不是设“长”,而是设“有节奏”:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- header=10-40,minrate=500:要求客户端 10 秒内开始发头,30 秒内完成(总限时 40 秒),且平均速率不低于 500 字节/秒;防 Slow Headers
- body=10-40,minrate=500:每收到 500 字节,超时延长 1 秒,上限 40 秒;防 Slow POST(如声明 Content-Length=10000 却每分钟只传 1 字节)
- HTTPS 站点建议将 header 初始值调至 20-40,为 TLS 握手留出缓冲
配合其他关键配置协同生效
单靠超时不够,必须联动运行机制:
- 关闭或大幅缩短
KeepAliveTimeout(例如设为 5–10 秒),避免空闲长连接堆积 - 限制并发连接上限:
MaxRequestWorkers 150(根据服务器内存调整),防止慢连接耗尽进程池 - 启用
eventMPM 替代 prefork,提升高并发下对慢连接的响应与清理能力 - 禁用不必要的模块(如
mod_info、mod_status),减少攻击面
验证配置是否真正起效
别只检查配置语法,要实测行为:
- 用
curl -v --limit-rate 10 http://your-site/模拟低速请求,观察是否在 10–15 秒内断连 - 查看 error_log 中是否有
request read timeout或client timed out记录 - 用
ss -tn state established | wc -l监控 ESTAB 连接数,压力测试时不应持续缓慢爬升










