limit_rate用于单连接响应体限速,单位字节/秒,支持k/m简写及变量;需配合limit_rate_after实现“先快后慢”,不支持burst/nodelay,仅作用于发送阶段。

在 Nginx 中,可以通过 limit_rate 指令为单个请求(比如一个下载链接)设置最大响应传输速率,从而控制带宽占用,避免大文件下载挤占服务器资源。
1. 基础用法:全局或 location 级限速
limit_rate 是一个响应阶段指令,只能在 http、server 或 location 块中使用。最常用的是在匹配下载路径的 location 中启用:
例如,限制所有以 /download/ 开头的请求下载速度为 500KB/s:
location ^~ /download/ {
limit_rate 500k;
}
单位支持 k(KB/s)、m(MB/s),也可写成整数(字节每秒),如 512000 表示 500KB/s。
2. 动态限速:按请求条件差异化控制
可以结合 map 指令实现更灵活的策略,比如对未登录用户限速、对特定 User-Agent 限速,或根据 IP 分组限速:
示例:对非白名单 IP 限速 200KB/s,白名单不限速:
map $remote_addr $limit_rate_value {
default 200k;
192.168.1.100 "";
2001:db8::1 "";
}
server {
location ^~ /download/ {
limit_rate $limit_rate_value;
}
}
注意:空字符串("")表示不限速;变量必须在 http 块顶层定义。
3. 配合 burst 和 nodelay 实现平滑限速(进阶)
limit_rate 本身不带缓冲或突发处理能力,它只是“匀速输出”。若想允许短时突发(比如 TCP 初始窗口快速填充),需配合 limit_rate_after 使用:
-
limit_rate_after 10m:前 10MB 不限速,之后开始按limit_rate限速 - 适合大文件下载场景,提升首屏/首段体验,又防止长期占满带宽
完整示例:
location ^~ /download/ {
limit_rate_after 5m;
limit_rate 300k;
}
4. 注意事项与常见问题
- 该指令作用于每个连接(request),不是每个 IP 或全局总带宽 —— 多个并发下载会各自受限
- 限速发生在响应体发送阶段,不影响 Nginx 内部处理(如后端代理耗时、磁盘读取)
- 若启用了 gzip 或其他响应压缩,
limit_rate限制的是压缩后的字节数(即网络实际发送量) - 不适用于 HTTP/2 流多路复用下的精细流控(Nginx 当前版本仍按连接限速)


















