apache的块不支持直接限速,须用mod_bw或mod_ratelimit模块在等作用域配置;mod_bw按字节/秒限下载带宽,mod_ratelimit控响应流速,二者均不可置于内。

Apache 的 <directory></directory> 块本身不支持直接设置传输速率限制(如每秒 KB 或 QPS),它只负责访问控制、权限和功能开关。传输速率控制必须通过其他模块在更上层或更底层实现,且不能写在 <directory></directory> 内部作为其子指令。
真正能限制传输速率的方案,需结合以下两类模块,并在合适的作用域(如 <virtualhost></virtualhost>、<location></location> 或全局)配置:
✅ 用 mod_bw 限制下载带宽(按 IP/路径/文件类型)
这是最常用、最贴近“目录级限速”需求的方案,虽不在 <directory></directory> 中生效,但可通过 <location></location> 或 <directory></directory> 外围的 <ifmodule></ifmodule> 块绑定到特定路径:
<ifmodule mod_bw.c>
BandwidthModule On
ForceBandWidthModule On
# 对整个 uploads 目录限速:所有请求限 512KB/s
<location>
BandWidth all 524288
</location>
# 对 ZIP 文件单独限速(>1MB 的 ZIP 限 256KB/s)
LargeFileLimit .zip 1024 262144
</ifmodule>
⚠️ 注意:
-
mod_bw需手动编译安装(非 Apache 自带); -
BandWidth单位是 字节/秒(不是 KB); - 它作用于响应体发送阶段,适合大文件下载场景;
- 不区分 HTTP 方法,也不控制请求数。
✅ 用 mod_ratelimit 限制响应输出速率(字节/秒)
该模块原生支持,无需额外编译,但仅控制单个响应的发送速率(类似流控),不是并发或 QPS 控制:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<location>
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 102400 # 限 100KB/s
</location>
✅ 适用场景:防止用户用多线程高速下载视频或大附件;
❌ 不适用于 API 接口限流,也不影响请求到达频率。
❌ <directory></directory> 内不能写的限速指令(常见误区)
以下写法无效或被忽略:
<directory>
# 错误!这些指令不被 Directory 容器接受
BandWidth all 100000 # → 语法错误或静默失效
LimitRequestRate 500 # → 只在服务器级或 .htaccess(旧版)中部分支持,且含义是“每连接每秒字节数”
Ratelimit on # → 必须在 Location 或虚拟主机中启用
</directory>
? 替代思路:用 <location></location> 绑定路径 + 模块限速
因为 <directory></directory> 匹配的是文件系统路径,而限速通常面向URL 路径,推荐统一用 <location></location>:
<location><ifmodule mod_bw.c>
BandWidth all 204800 # 200KB/s
MinBandWidth all -1
</ifmodule></location>
这样逻辑更清晰,也避免因 DocumentRoot 和别名映射导致的路径错配问题。
限速不是靠 <directory></directory> 实现的,而是靠模块 + 正确作用域。选对模块、放对位置,才能真正生效。










