必须在同一个location块中同时配置limit_rate_after和limit_rate,前者指定前n字节不限速(如5m),后者指定超限后每秒速率(如300k),单位严格区分大小写且不支持小数或mb。

直接在对应 location 块里配 limit_rate_after 和 limit_rate 就行,两者必须同时出现,缺一不可。核心不是“设多少兆”,而是告诉 Nginx:前 N 字节全速发,超了就按指定速率匀速吐。
怎么写才生效
这两个指令必须成对放在同一个 location 块中:
-
limit_rate_after定义“前多少字节不限速”,单位支持k(KB)、m(MB),比如5m表示 5 × 1024 × 1024 = 5,242,880 字节 -
limit_rate定义“超阈值后每秒最多发多少字节”,同样支持k、m,如300k表示 300 × 1024 = 307,200 字节/秒 - 单位严格区分大小写:
m✅,M❌;不支持小数或MB这类写法,5.5m会报错 - 如果文件总大小 ≤
limit_rate_after的值,那limit_rate完全不触发,整文件都跑满带宽
推荐的匹配方式:只作用于真·下载路径
别在 http 或 server 块里全局配置,否则连首页 CSS、小图标都会被拖慢。应精准定位大文件场景:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 按目录匹配(性能高、优先级稳):
location ^~ /dl/ { limit_rate_after 5m; limit_rate 512k; } - 按后缀匹配(适合统一后缀的大文件):
location ~ \.(zip|iso|mp4|tar\.gz)$ { limit_rate_after 2m; limit_rate 800k; }
注意点号要转义,tar\.gz才能正确识别
几个关键细节不能漏
实际用起来容易踩坑,这些点直接影响效果:
-
Range 断点续传也适用:用户暂停后从
bytes=10485760-继续下载,Nginx 仍以本次响应已发送字节数为起点计数——续传的前 5MB 同样全速 -
压缩会影响计数:如果开了
gzip on,响应体被压缩后字节数变少,可能导致limit_rate_after提前触发。建议下载路径关 gzip:gzip off; -
不兼容 proxy_pass 场景下的限速逻辑:如果文件由后端服务(如 Python/Java)动态生成并透传,
limit_rate_after依然有效,但限速发生在 Nginx 向客户端发送阶段,不影响后端处理速度
常见组合参考值
根据文件类型和带宽情况,可直接套用:
- 小安装包(≤100MB)、PDF 文档:
limit_rate_after 5m; limit_rate 512k; - 大视频、镜像文件(GB 级):
limit_rate_after 10m; limit_rate 1m; - 内网高速环境、需兼顾体验与公平:
limit_rate_after 1m; limit_rate 2m;










