不推荐用mod_ratelimit限速下载,因其仅为响应体流式节流,不感知请求类型、不控并发、不区分方法或后缀,易致限速失效、CPU升高、大文件卡顿。

Apache 的 mod_ratelimit 模块可用于对特定 URL 路径(如虚拟目录)的响应流量进行**客户端侧带宽限速**,适用于简单场景下的下载限速(例如限制 ZIP、PDF 文件下载速度)。它不是服务器端限流,而是通过在响应中插入延迟、控制发送节奏来模拟低带宽环境。
确认模块已启用并加载
该模块默认不启用,需手动加载:
- 检查是否已编译进 Apache:
httpd -M | grep ratelimit或apache2ctl -M | grep ratelimit - 若未启用,在配置中添加:
LoadModule ratelimit_module modules/mod_ratelimit.so(路径依系统而异) - 重启 Apache 生效:
systemctl restart apache2或apachectl restart
在虚拟主机或目录中配置限速规则
限速必须作用于具体位置(、 或 .htaccess),且仅对匹配的响应内容生效。推荐使用 针对 URL 路径(如 /downloads/):
<virtualhost>
ServerName example.com
DocumentRoot /var/www/html
<pre class="brush:php;toolbar:false;"><location>
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 100
# 单位:KB/s;此处为 100 KB/s ≈ 800 Kbps
</location>
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
注意:SetOutputFilter RATE_LIMIT 必须存在,否则限速不生效;rate-limit 环境变量值单位为KB/s(非字节/秒或 Mbps)。
限速行为与关键限制
mod_ratelimit 的工作方式是“削峰填谷”式流控,有以下特点:
- 只对HTTP 200 响应体限速,不作用于重定向、错误页、头信息或静态文件缓存命中(如经由 mod_cache 缓存后可能绕过)
- 限速基于客户端接收速率,服务端仍会生成完整响应,只是分段延迟发送
- 不区分用户或 IP,同一路径下所有请求共享限速策略
- 无法按文件类型单独限速(如只限 *.iso),需配合
或改用mod_qos/mod_evasive等更高级模块
验证与调试建议
启用后可通过以下方式确认效果:
- 用
wget --limit-rate=0或curl -L https://example.com/downloads/bigfile.zip --output /dev/null观察平均下载速度 - 开启 Apache 日志记录响应时间:
LogFormat "%h %l %u %t \"%r\" %>s %O %D" rate_log,观察%O(字节数)与%D(微秒)比值是否接近设定速率 - 临时添加
LogLevel debug并查看 error.log 中是否有ratelimit相关日志(部分版本支持)










