Nginx可通过location配合limit_rate实现文件下载限速,支持基础限速、按路径/类型精准限速、基于变量的动态限速及limit_rate_after“先快后慢”策略,并需注意gzip对限速准确性的影响。

在 Nginx 中,可以通过 location 配合 limit_rate 指令实现对特定路径下文件下载的限速控制,且支持动态调整、按客户端区分或结合其他条件精细化管理。
基础限速:用 limit_rate 控制全局下载速度
在匹配文件下载路径的 location 块中直接设置 limit_rate,单位为字节/秒(支持 k、m 后缀):
-
limit_rate 512k;表示限制每个连接最大下载速度为 512 KB/s - 该指令作用于单个 TCP 连接,多个并发下载会各自受限,不共享带宽
- 可放在
http、server或location块中,越靠近 location 优先级越高
按文件类型或路径精准限速
利用正则或前缀匹配,只对特定资源限速,避免影响静态资源或 API:
-
location ~* \.(zip|rar|iso|tar\.gz)$ { limit_rate 1m; }—— 对常见大文件后缀统一限速 1MB/s -
location /downloads/ { limit_rate 256k; }—— 对整个下载目录限速 - 注意:正则 location 优先级高于前缀 location,需合理设计匹配顺序
动态限速:结合变量实现差异化控制
使用 $limit_rate 变量,根据请求特征(如 IP、User-Agent、参数)动态设置速率:
-
set $limit_rate 512k;if ($arg_nolimit = "1") { set $limit_rate ""; }limit_rate $limit_rate;—— 允许通过 ?nolimit=1 参数临时取消限速 -
map $remote_addr $download_speed { default 256k; 192.168.1.100 2m; }
然后在 location 中写limit_rate $download_speed;,实现白名单提速
增强体验:配合 limit_rate_after 实现“先快后慢”
对大文件下载,可允许初始高速缓冲,之后再限速,提升用户感知:
-
limit_rate_after 5m;—— 前 5MB 不限速 -
limit_rate 512k;—— 超过 5MB 后限制为 512 KB/s - 两者必须同时出现才生效,常用于视频、软件安装包等场景
不复杂但容易忽略:限速基于响应体发送阶段,不压缩(gzip)时生效准确;若启用 gzip,建议在限速 location 中关闭压缩(gzip off;),否则实际速率可能偏离预期。











