关键不是拉长等待时间,而是分阶段主动切断低效连接;应启用mod_reqtimeout配置RequestReadTimeout header=20-40,minrate=500和body=20,minrate=500,配合KeepAliveTimeout 2–5秒及mpm_event模式实现精准防护。

调整 Apache 超时参数防长连接卡死,关键不是拉长等待时间,而是分阶段主动切断低效连接。默认 Timeout 300 秒反而会让慢速攻击或异常客户端长期占用工作者线程,造成“假性卡死”。真正有效的做法是组合使用 RequestReadTimeout、KeepAliveTimeout 和 MPM 模式优化,从源头控制连接节奏。
用 RequestReadTimeout 替代粗粒度 Timeout
mod_reqtimeout 是防卡死的核心模块,它把请求拆成头(header)和体(body)两阶段,每阶段都带时间窗 + 最小速率双校验:
- header=20-40,minrate=500:客户端必须 20 秒内开始发请求头,40 秒内发完全部字段,且任意 2 秒至少传 1000 字节(≥500 B/s)
- body=20,minrate=500:POST 或上传类请求体,每 20 秒内必须收到 ≥1000 字节,否则断连
- HTTPS 站点可微调 header 初始值为 25–45 秒,避免 TLS 握手延迟误触发
- 该配置必须写在服务器级上下文(httpd.conf 或
),不能放在 .htaccess 或 中
收紧 KeepAliveTimeout 防空闲连接滞留
很多“卡死”其实是 Keep-Alive 连接空闲挂起造成的,并非 Timeout 问题:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- KeepAliveTimeout 设为 2–5 秒(API 类服务建议 3 秒,静态资源多可放宽至 8–12 秒)
- 高危入口如 /login、/api/v1/auth 直接关闭复用:KeepAlive Off
- 确保 KeepAlive On 已启用(默认通常开启),但 MaxKeepAliveRequests 建议设为 100–200,覆盖典型页面资源请求数
协同调整 Timeout 和 MPM 模式
Timeout 不再是主力防护,而是兜底值,需配合底层模型才能真正释放连接:
- Timeout 建议压到 15–30 秒(普通服务可设 25,高并发静态资源可设 10)
- 切忌 Timeout ≤ KeepAliveTimeout,否则逻辑冲突导致行为不可预测
- 启用 mpm_event 模式(非 prefork),它对慢连接调度更高效
- 检查 MaxRequestWorkers 是否有余量(建议 128–256),避免线程池被耗尽
验证与生效要点
改完配置后必须完整重启并验证是否真正生效:
- 语法检查:apachectl configtest 或 apache2ctl configtest
- 重启服务:sudo systemctl restart apache2(graceful 不生效)
- 确认模块加载:apachectl -M | grep reqtimeout
- 观察错误日志:tail -f /var/log/apache2/error.log,留意 client timed out 或 408 错误频率

















