Apache中DocumentRoot不控制带宽,须用<Location>配合mod_ratelimit(如SetOutputFilter RATE_LIMIT、SetEnv rate-limit 500)对URL路径限速,禁用EnableSendfile,确保Content-Length,并可叠加MaxConnPerIP防多线程刷取。

DocumentRoot 本身不控制带宽,它只是静态文件的物理起点。要防止大文件下载耗尽带宽,必须在 DocumentRoot 对应的 <Directory> 外围,配合限速模块对目标路径做主动流控——核心是“不靠 DocumentRoot 管,而靠 Location + mod_ratelimit 或 mod_bw 控”。
用 <Location> 对 DocumentRoot 下的大文件目录限速
<Directory> 块不能写限速指令,必须改用 <Location>(匹配 URL 路径),并启用 mod_ratelimit:
通过PDFAPIHub云API将office文档(DOCX、DOC、PPT、PPTX、XLS、XLSX、CSV、TXT、ODT、RTF)转换为PDF,文档上传至pdfapihub.com完成转换。
<Location "/downloads">
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 500
</Location>-
rate-limit 500表示 500 KB/s(注意单位是 KB/s,不是 byte/s) - 需先启用模块:
a2enmod ratelimit(Debian/Ubuntu)或确认LoadModule ratelimit_module modules/mod_ratelimit.so已取消注释 -
<Location "/downloads">必须与 DocumentRoot 中该子目录的 URL 路径一致(如DocumentRoot "/var/www/site",则/downloads对应/var/www/site/downloads)
限制并发连接数,防多线程下载拖垮
单 IP 同时开 10 个线程下同一个大文件,限速值会被乘以 10。加一层连接数控制更稳妥:
<Location "/downloads">
<IfModule mod_limitipconn.c>
MaxConnPerIP 2
OnlyIPLimit application/octet-stream
</IfModule>
</Location>-
MaxConnPerIP 2:每个 IP 最多 2 个并发连接 -
OnlyIPLimit application/octet-stream:只对二进制下载类型生效(避免影响图片、JS 等)
关键配套措施,避免限速失效
- ✅ 禁用
EnableSendfile on:某些系统上 sendfile 会绕过限速逻辑,加一行EnableSendfile off到虚拟主机配置中 - ✅ 确保响应头含
Content-Length:mod_ratelimit依赖该头计算速率;动态生成的大文件(如 PHP 输出)需手动设置 - ✅ 不要把限速写在
<Directory>或全局段:语法无效,Apache 会忽略或报错 - ✅ 若用了 CDN 或反向代理,确保它透传
Range和限速响应头,否则客户端看到的是未限速的缓存
不复杂但容易忽略

















