limit_rate指令用于限制单个连接的响应传输速率,单位为字节/秒,可配置于http、server、location等块中,支持k/m后缀,设0表示不限速;配合limit_rate_after可实现前N字节不限速。

在 Nginx 中,limit_rate 指令可用于限制单个连接的响应传输速率(即下载速度),适用于防止大文件下载占用过多带宽、保护后端服务或实现基础的流量整形。
启用 limit_rate 的基本用法
该指令作用于 HTTP 响应阶段,对每个请求的响应体(如文件下载)按字节/秒限速,单位是字节(不是 KB/s 或 MB/s)。例如:
-
limit_rate 512000;表示限制为 500 KB/s(512000 字节/秒) -
limit_rate 1m;表示限制为 1 MB/s(注意:Nginx 支持k、m单位后缀) - 设为
0表示不限速(默认值)
作用域与配置位置
limit_rate 可出现在 http、server、location 和 if in location 块中。推荐按需设置在具体 location 中,避免全局影响:
- 对所有静态资源限速:
location ~ \.(zip|tar|iso|pdf)$ { limit_rate 256k; } - 仅对特定路径限速:
location /downloads/ { limit_rate 1m; } - 配合
limit_rate_after实现“前 N 字节不限速,之后再限速”,适合提升小文件体验:limit_rate_after 5m; limit_rate 128k;(前 5MB 快速发送,之后压到 128KB/s)
注意事项与常见误区
该指令限制的是单个 TCP 连接的响应发送速率,并非整个 IP 或用户总带宽。多个并发连接会各自独立受限。
- 不兼容 HTTP/2 的流控机制,但依然生效(Nginx 在应用层做缓冲和节流)
- 若启用
sendfile on,部分系统可能绕过limit_rate(Linux 下 sendfile + tcp_nopush 可能导致首包突增),建议搭配tcp_nodelay on;或改用limit_rate_after缓解 - 与
limit_conn/limit_req配合使用效果更佳:前者控并发连接数,后者控请求频次,limit_rate控单连接带宽
验证是否生效
可通过 curl -v 观察响应头中无直接体现,但可用以下方式验证:
- 用
curl -o /dev/null -s -w '%{speed_download}\n' http://example.com/bigfile.zip查看平均下载速度 - 结合
nginx -t && nginx -s reload确保配置已加载 - 检查 error.log 是否有 warning(如单位写错:
limit_rate 500kb;应为500k)


















