必须启用mod_ratelimit模块、将setoutputfilter rate_limit嵌套在等合法容器内、为每个虚拟主机单独配置独立并设正整数kb/s限值,三者缺一不可。

必须启用 mod_ratelimit 模块
该模块不是默认开启的。Debian/Ubuntu 系统执行:
sudo a2enmod ratelimit && sudo systemctl restart apache2
RHEL/CentOS 系统执行:
sudo systemctl restart httpd
注意:systemctl reload 或 apachectl graceful 不会重新初始化过滤器链,限流不会生效。
限流指令不能写在 根层级
直接在 <virtualhost></virtualhost> 块里写 SetOutputFilter RATE_LIMIT 会报错:
Invalid command 'SetOutputFilter'
正确做法是必须包裹在 <location></location>、<directory></directory> 或 <files></files> 容器中。推荐用 <location></location>,因为它匹配请求 URI,不受 Alias、Rewrite 或反向代理影响,更稳定。
为每个虚拟主机单独配 并设独立 rate-limit
每个 <virtualhost></virtualhost> 内自定义自己的 <location></location>,彼此完全隔离:
- site-a.example.com 全站限 150 KB/s:
<location><br> SetOutputFilter RATE_LIMIT<br> SetEnv rate-limit 150<br></location>
- site-b.example.com 仅 /downloads 下载限 50 KB/s:
<location><br> SetOutputFilter RATE_LIMIT<br> SetEnv rate-limit 50<br></location>
rate-limit 的值单位是 KB/s,只接受正整数。写 200 合法,写 200k、0.2 或 200KB 都会解析失败或被截断为 0。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
验证是否真正生效
用 curl 检查响应头,确认 Apache 在直接输出内容:
- 执行:
curl -sI http://site-a.example.com/test.bin - 若返回含
Content-Length且无Transfer-Encoding: chunked,说明限流正在起作用 - 若返回
X-Sendfile、X-Accel-Redirect,或 PHP 用readfile()输出但未关闭 output buffering,则限流失效










