limit_rate指令用于按连接限速,单位字节/秒,可置于server块实现虚拟主机级限速;支持limit_rate_after实现“先快后慢”,支持变量动态限速,作用域遵循http→server→location覆盖规则。

Nginx 的 limit_rate 指令可以对响应给客户端的数据流进行下行限速,它作用于每个连接(connection),单位是字节/秒。要对特定虚拟主机(即某个 server 块)整体生效,只需将该指令放在对应 server 块内即可,无需额外模块或复杂配置。
直接在 server 块中配置 limit_rate
这是最简单、最常用的方式。Nginx 会为该虚拟主机下所有请求(除非被子作用域覆盖)应用统一的下行速率限制。
- 值为
0表示不限速(默认行为) - 值如
100k表示限制为 100 KB/s;500k即 500 KB/s;支持k(KB)、m(MB)单位缩写 - 该限制基于每个 TCP 连接独立生效,不是整个 server 的总带宽上限
配合 limit_rate_after 实现“先快后慢”策略
对于大文件下载等场景,可先允许快速传输前 N 字节,再启用限速,提升用户体验。
-
limit_rate_after 2m;:前 2 MB 不限速 -
limit_rate 200k;:超过 2 MB 后限制为 200 KB/s - 两者需在同一作用域(如 server 或 location)中同时出现才有效
按条件动态限速(使用变量)
从 Nginx 1.7.7 起,limit_rate 支持变量,可结合 map 或内置变量实现差异化限速。
- 例如:对手机用户限速更严,或对特定 IP 段放宽限制
- 先用
map定义速率变量:
map $http_user_agent $rate_limit {
default 100k;
~*android 50k;
~*iphone 50k;
} - 再在
server块中写:limit_rate $rate_limit;
注意作用域与继承关系
limit_rate 可出现在 http、server、location 三个层级,低层级会覆盖高层级设置。
- 放在
server块中 → 影响该域名下全部路径(除非某location显式重写) - 若某个
location /api/需要不限速,可在此 location 内设limit_rate 0; - 不建议在
http块全局设置,否则所有虚拟主机都会受影响,失去针对性









