limit_rate是Nginx限制单个连接响应发送速率的指令,单位字节/秒,支持k/m后缀及0关闭;可配合limit_rate_after实现“先快后慢”,支持变量动态限速,并需注意作用域、HTTP/2复用及gzip压缩影响。

limit_rate 是 Nginx 用来限制单个连接响应数据发送速率的指令,适用于控制客户端下载速度(如大文件下载),防止带宽被单个连接占满。
基本用法:直接设置限速值
在 location、server 或 http 块中使用 limit_rate,单位是字节/秒:
-
limit_rate 100k;→ 限制为 100 KB/s(注意:k 表示 1024 字节) -
limit_rate 512k;→ 512 KB/s -
limit_rate 1m;→ 1 MB/s(m 表示 1024×1024 字节) -
limit_rate 0;→ 关闭限速(即不限制)
配合 limit_rate_after 实现“先快后慢”
很多场景希望用户前几 MB 下载快,之后再限速(提升体验 + 防滥用)。用 limit_rate_after 指定触发限速前的字节数:
-
limit_rate_after 5m;→ 前 5 MB 不限速 -
limit_rate 200k;→ 超过 5 MB 后限为 200 KB/s - 两者需在同一作用域(如同一个 location)中生效
动态限速:按变量或条件调整速率
Nginx 1.7.7+ 支持变量值,可结合 $arg_、$remote_addr 等实现差异化限速:
limit_rate $limit_rate_value;- 通过 map 构建映射关系,例如对内网 IP 不限速,对外网限速:
- map $remote_addr $limit_rate_value {
- default 200k;
- 192.168.0.0/16 0;
- }
注意事项与常见问题
- 限速发生在响应体发送阶段,不影响请求处理或 upstream 通信速度
- 对 HTTP/2 连接同样生效,但注意:一个连接复用多个请求时,限速作用于该连接的整体输出流
- 若启用 gzip,限速基于压缩后的字节数(即实际发给客户端的数据量)
- 不建议在 http 块全局配置,容易误伤 API 或小资源;推荐在具体 location 中精确控制,如
location ~ \.(zip|tar|iso)$











