apache静态网站防慢攻击需精细控制连接生命周期:设timeout 10–30秒、keepalivetimeout 2–5秒、maxkeepaliverequests≤100;启用mod_reqtimeout限制头/体读取超时与速率;调优mpm线程数及禁用非必要模块与功能。

Apache 静态网站部署中防范慢攻击(如 Slowloris、Slow HTTP POST)的关键,不是靠“禁止访问”或“加防火墙”,而是通过精细控制连接生命周期——特别是限制单个请求的等待时间、读写超时和并发连接行为。2.4.29 及以上版本已内置成熟机制,无需额外模块。
核心超时参数配置(httpd.conf 或虚拟主机内)
在 httpd.conf 的全局段或 <virtualhost></virtualhost> 块中添加或修改以下指令:
- Timeout 30:整个请求处理的最大时限(秒),包括接收请求头、等待请求体、发送响应。建议设为 10–30 秒。过长(如默认 300)易被慢速读取耗尽连接。
- KeepAliveTimeout 5:客户端在一次 TCP 连接中发送下一个请求前,服务器最多等待几秒。静态站建议 2–5 秒,避免空闲连接长期占用 worker。
- MaxKeepAliveRequests 100:单个 Keep-Alive 连接允许的最大请求数。静态资源多可适当提高,但不宜无限(如设为 0)。
针对慢读/慢写的专项防护(mod_reqtimeout 模块)
该模块默认启用(2.4.29 Win64 版本含 mod_reqtimeout.so),需在配置中显式加载并设置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认
LoadModule reqtimeout_module modules/mod_reqtimeout.so已取消注释; - 添加如下配置(推荐放在全局段):
RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout body=10,MinRate=500
→ 表示:请求头必须在 10 秒内发完,否则断连;若超过 10 秒才发完,则后续每秒至少要传 500 字节,否则中断。
→ 请求体(如 POST 数据)必须在 10 秒内完成上传,且速率不低于 500 B/s。
配合 MPM 模型限制并发连接数
Windows 下默认使用 mpm_winnt(事件驱动),它不依赖线程池,但仍有连接上限。在 httpd.conf 中检查并调整:
- ThreadsPerChild 150:每个子进程创建的线程数,直接影响并发处理能力。静态站建议 64–150,过高反而增加调度开销;
- MaxConnectionsPerChild 10000:一个子进程处理多少请求后自动重启,防止内存泄漏累积;
- 若启用了
eventMPM(需手动切换),还可配ListenBacklog 511控制监听队列长度,防 SYN 泛洪。
补充建议:禁用非必要功能减小攻击面
静态站点无需动态解析,应主动关闭潜在风险项:
- 注释掉或删除
LoadModule cgi_module、php7_module等非必需模块; - 确保
Options -ExecCGI -Includes -Indexes,关闭目录浏览与服务端包含; - 在
<directory></directory>块中添加Require all granted并禁用.htaccess解析(AllowOverride None),避免运行时重写开销。









