大文件下载限流需分场景:先不限速传前5MB,超量后限1MB/s;仅对/dl/目录或zip/iso等后缀限速;代理时设proxy_max_temp_file_size防磁盘占满;支持URL参数动态调速。

针对大文件下载做限流,核心不是“一刀切压低速度”,而是区分场景、保护资源、兼顾体验。重点在三个层面:控制单连接带宽、避免小资源被误伤、防止磁盘被临时文件占满。
只对大文件生效,跳过小资源
用 limit_rate_after + limit_rate 组合,让前几 MB 快速加载,后续再限速:
- 在
http或server块中添加:
limit_rate_after 5m;
limit_rate 1m;
含义:每个连接先不限速传输前 5MB(覆盖图标、JS、小 PDF),超过后按 1MB/s 稳定输出。这对 100MB 的安装包或视频很友好,用户能立刻看到进度条,服务器也不扛峰值带宽。
精准匹配下载路径或后缀
不建议全局设限速,容易拖慢首页、API。应只作用于明确的下载入口:
- 按目录匹配(推荐,性能高):
location ^~ /dl/ {
limit_rate 512k;
}
- 按文件类型匹配(需确保 mime.types 已加载):
location ~ \.(zip|iso|mp4|pdf|tar\.gz)$ {
limit_rate 800k;
}
注意:^~ 前缀匹配优先级高于正则,更稳定;\. 要转义点号,tar\.gz 才能正确识别。
配合 proxy_max_temp_file_size 防磁盘爆满
当 Nginx 代理后端大文件(如从 Tomcat 或 Node.js 流出的 ISO),若启用缓冲(默认 on),它会写临时文件到磁盘。此时必须限制单个临时文件大小:
- 在
http或server块中设置:
proxy_buffering on;
proxy_max_temp_file_size 600m;
说明:假设业务最大下载文件约 500MB,设为 600m 可防异常响应(如后端返回超长日志)撑爆磁盘。若明确走流式传输(如视频点播),直接关缓冲:proxy_buffering off;,该参数失效,也更省资源。
可选:按 URL 参数动态调速
给不同用户提供差异化体验,比如 VIP 加速、测试环境限速:
- 在
http块定义映射:
map $arg_lvl $dl_rate {
default "256k";
"high" "2m";
"low" "128k";
}
- 在对应 location 中引用:
location /dl/ {
limit_rate $dl_rate;
}
访问 /dl/app.zip?lvl=high 即按 2MB/s 下载;无参数则走默认 256KB/s。注意不要暴露敏感逻辑(如 ?speed=admin),需结合鉴权使用。


















