nginx的limit_rate指令用于限制单个连接的响应传输速率,单位字节/秒(支持k、m后缀),默认0为不限速;可配合limit_rate_after实现“先快后慢”,且仅作用于http响应体发送阶段。

Nginx 的 limit_rate 指令用于限制单个连接的响应传输速率,常用于控制客户端下载速度,防止带宽被某个请求占满。
基本用法:在 location 或 server 块中设置
该指令作用于 HTTP 响应体的发送阶段,单位是字节/秒(支持 k、m 后缀),默认值为 0(不限速)。
-
limit_rate 100k;表示限制为 100 KB/s -
limit_rate 1m;表示限制为 1 MB/s -
limit_rate 0;表示取消限速(显式启用“不限”)
配合条件使用:仅对特定文件或用户限速
可通过嵌套在 if、map 或匹配特定后缀的 location 中实现精细化控制。
- 对所有 .zip 文件限速:
location ~ \.zip$ {
limit_rate 512k;
} - 对非内网 IP 限速(需先定义 $real_ip):
map $remote_addr $limit_flag {
default 1;
192.168.0.0/16 0;
}
server {
limit_rate $limit_flag; # 注意:此处需配合 limit_rate_after 使用才合理,单独用会出错 —— 见下条
搭配 limit_rate_after 实现“先快后慢”
很多场景希望用户先快速获取开头(如视频首屏、文件头),再限速。这时要用 limit_rate_after 设置阈值(字节),超过后再启用 limit_rate。
-
limit_rate_after 512k;表示前 512 KB 不限速 -
limit_rate 256k;表示从第 512 KB 开始限为 256 KB/s - 两者必须同时出现才生效;若只设
limit_rate,则全程限速
注意作用域和继承关系
limit_rate 可出现在 http、server、location、if(不推荐)块中,低层级会覆盖高层级配置。但不支持在 upstream 或非 HTTP 模块中使用。
- 若在 http 块设了
limit_rate 100k,又在某个 location 中设limit_rate 0,该 location 就不受限 - 不支持按用户、按 session 或按并发数限速 —— 那是
limit_conn和limit_req的职责 - 限速基于 TCP 连接粒度,不是整个请求或整个客户端 IP











