Nginx对大文件分片下载限速需避免全局配置,应按路径或后缀匹配location,结合limit_rate_after与limit_rate实现首段不限速、后续恒定压速;代理场景须设proxy_max_temp_file_size防磁盘爆满,支持动态调速需用map配合鉴权。

Linux 下 Nginx 对大文件分片下载(即带 Range 请求的断点续传)做限速,不能简单套用普通限速逻辑——因为每个 Range 子请求都会被当作独立连接处理,limit_rate_after 也对每个 Range 单独计数。配置不当会导致“限速失效感”,实则机制正常。核心是:明确限速目标(单连接速率?总 IP 带宽?首段体验?),再选匹配策略。
只对分片请求本身限速:按连接恒定压速
这是最直接、最稳定的做法。Nginx 天然按连接限速,Range 请求也不例外:
-
limit_rate限制的是该 TCP 连接上所有响应体(含每个Range块)的发送速率,单位字节/秒; - 若客户端开 4 个线程并发下载同一文件,就产生 4 个连接,总速 ≈
limit_rate × 4; - 必须配合
limit_rate_after使用,否则首段(如视频头、校验块)也会被拖慢; - 推荐写法(放在匹配下载路径的
location中):
limit_rate_after 2m;
limit_rate 512k;
含义:每个Range请求都先不限速发前 2MB,之后恒定 512KB/s。
精准作用于大文件:跳过小资源与非下载流量
避免把 JS、图标、API 响应一起限速,必须做路径或后缀过滤:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 按目录限速(性能高、推荐):
location ^~ /dl/ {
limit_rate_after 3m;
limit_rate 800k;
} - 按后缀限速(需确保
mime.types已加载):
location ~* \.(zip|iso|mp4|tar\.gz|dmg)$ {
limit_rate_after 5m;
limit_rate 1m;
}
注意:\.要转义点号,tar\.gz才能正确匹配;~*表示忽略大小写。 - 不建议在
http块全局设limit_rate,否则首页 HTML、CSS 全被拖慢。
防磁盘爆满:代理大文件时必配 proxy_max_temp_file_size
当 Nginx 作为反向代理(如从后端 Tomcat/Node.js 流式输出 ISO),默认启用缓冲,会把整个 Range 响应写入临时文件——若不限制大小,单个 500MB 分片可能撑爆 /var/lib/nginx/tmp:
- 在
http或server块中添加:
proxy_buffering on;
proxy_max_temp_file_size 600m;
若最大分片不超过 500MB,设为600m可留出余量; - 若后端已支持流式传输(如用
response.pipe()),可彻底关闭缓冲:
proxy_buffering off;
此时proxy_max_temp_file_size不生效,更省磁盘和内存。
动态调速:按 URL 参数或用户身份差异化控制
适合 VIP 加速、测试环境限速等场景,但需结合鉴权防滥用:
- 在
http块定义安全映射(白名单机制):
map $arg_lvl $dl_speed {
default "300k";
"fast" "2m";
"slow" "128k";
} - 在对应
location中引用:
location /dl/ {
limit_rate $dl_speed;
limit_rate_after 2m;
}
访问/dl/app.zip?lvl=fast即按 2MB/s 下载;无参数走默认 300KB/s。 - 切勿暴露敏感参数如
?speed=admin,应配合auth_request或 IP 白名单使用。

















