Nginx 通过 limit_rate 指令可按连接限制静态资源下载速率,支持单位k/m/b、正则匹配类型、变量动态控制及 limit_rate_after 分段限速,适用于轻量级带宽保护场景。

在 Nginx 中通过 limit_rate 指令可以对客户端下载静态资源(如 ZIP、PDF、MP4 等)的速率进行限制,防止带宽被单个请求占满。它作用于每个连接(connection),不是全局或每 IP,适合轻量级限速场景。
基础配置:在 location 块中启用限速
limit_rate 必须放在 location、server 或 http 块中,最常用的是针对特定静态资源路径设置。例如,限制所有 /download/ 下的文件下载速度为 512KB/s:
location /download/ {
alias /var/www/static/downloads/;
limit_rate 512k;
}
注意:alias 后路径末尾需加 /,且 limit_rate 单位支持 k(KB)、m(MB)、b(字节),默认单位是字节。512k = 524288 字节/秒。
按文件类型精细化限速
可结合 location ~ \.xxx$ 正则匹配,对不同后缀资源设不同速率:
-
location ~ \.(zip|rar|7z)$ { limit_rate 256k; }—— 压缩包更慢,保护带宽 -
location ~ \.(pdf|txt)$ { limit_rate 1m; }—— 文档类稍快,体验更友好 -
location ~ \.(mp4|avi)$ { limit_rate 0; }—— 设为0表示不限速(慎用)
多个 location 块之间遵循最长匹配优先原则,建议把更具体的正则写在前面,避免被泛匹配覆盖。
动态限速:配合变量实现条件控制
limit_rate 支持使用变量(如 $arg_ 开头的 URL 参数),可实现“用户传参决定速率”或“白名单提速”:
-
limit_rate $limit_rate_var;(先在 server 块中用set赋值) - 例如:允许带
?speed=fast的请求提速到 2M/s,其余保持 512k -
set $limit_rate_var "512k";if ($args ~ "speed=fast") { set $limit_rate_var "2m"; }limit_rate $limit_rate_var;
⚠️ 注意:if 在 location 外使用有风险,建议将整套逻辑封装在 map 块中更安全(Nginx 推荐方式):
map $arg_speed $limit_rate_var {
default "512k";
"fast" "2m";
}
server {
...
limit_rate $limit_rate_var;
}
补充技巧与注意事项
-
limit_rate_after可设置“先不限速下载前 N 字节,再开始限速”,提升小文件体验。例如:limit_rate_after 1m; limit_rate 512k;表示前 1MB 不限速,之后限 512KB/s - 该指令对 HTTP/2 连接同样生效,但不区分请求优先级;若启用了
limit_conn或limit_req,它们互不影响,可叠加使用 - 限速发生在响应体发送阶段,不影响 Nginx 处理请求的速度,也不减少磁盘 I/O,仅控制 socket 发送节奏
- 测试时可用
wget --limit-rate=200k或curl -L https://site/download/test.zip --output /dev/null观察实际速率


















