配置块不能防护慢连接攻击,仅控制路径级权限;真正防护需在或全局配置中启用mod_reqtimeout、keepalive off等连接层机制,并配合mpm资源限制。

<directory></directory> 配置块本身不能直接防护慢连接攻击,它只控制路径级的访问权限、脚本执行、重写等行为,不参与连接生命周期管理、超时控制或速率限制。把防护逻辑放在 <directory></directory> 里,就像在门内装锁防撬墙——位置错了,根本不起作用。
真正起效的防护必须落在 Apache 的连接层和请求处理层,由专用模块和全局/虚拟主机级参数协同完成。
✅ 正确做法:别在 <directory></directory> 里设慢连接防护
-
mod_reqtimeout的RequestReadTimeout指令不允许写在<directory></directory>或.htaccess中,只能放在服务器级上下文(如httpd.conf、apache2.conf)或<virtualhost></virtualhost>内。 -
KeepAlive Off、Timeout、KeepAliveTimeout等也不支持按目录设置,它们作用于整个连接或虚拟主机。 - 在
<directory></directory>中强行加SetEnvIf或RewriteCond模拟限速,既无效又增加解析开销,还可能被绕过。
✅ 应该在哪配?三个关键层级
1. <virtualhost></virtualhost> 块内 —— 按站点差异化防护
适合区分 API、后台、静态资源等不同风险等级的服务:
<virtualhost>
ServerName api.example.com
KeepAlive Off # 关闭复用,防 Slowloris
RequestReadTimeout header=25-45,minrate=500 body=20,minrate=500
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
</virtualhost>
2. 全局服务器配置(httpd.conf)—— 基础兜底策略
确保所有未显式覆盖的站点也有基本防护:
Timeout 25 KeepAliveTimeout 3 LoadModule reqtimeout_module modules/mod_reqtimeout.so RequestReadTimeout header=20-40,minrate=500 body=20,minrate=500
3. MPM 和连接数限制(mpm_event.conf)—— 控制资源天花板
防止连接池被耗尽:
<ifmodule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestWorkers 200 # 关键!避免被占满
MaxConnectionsPerChild 0
</ifmodule>
⚠️ 常见错误配置(务必避开)
- 把
RequestReadTimeout放进<directory></directory>→ 配置加载失败,日志报错,防护失效 - 用
<directory></directory>+RewriteRule尝试拦截低速请求 → 无法识别传输节奏,纯属心理安慰 - 在
<directory></directory>中设AllowOverride All后依赖.htaccess控制超时 →.htaccess不支持任何超时指令
✅ 补充加固:配合 <directory></directory> 做好边界清理
虽然 <directory></directory> 不防慢连,但它能帮你缩小攻击面,间接提升整体韧性:
-
禁用上传目录的脚本执行:
Apache 2.4.62下载PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<directory> Options None SetHandler default-handler Require all granted </directory> -
阻断敏感文件访问:
<filesmatch> Require all denied </filesmatch> -
关闭目录索引(防信息泄露+辅助遍历):
<directory> Options -Indexes +FollowSymLinks AllowOverride None </directory>
不复杂但容易忽略










