Skip to content

limit_req_zone 知识点(写在 http 块中):

格式:limit_req_zone key zone=name:size rate=rate;

参数说明
key限流的维度标识(即“谁被限流”)。可以是变量、变量组合、固定字符串。
zone=name:size定义共享内存区域:
- name:zone 名称(后续通过 limit_req zone=name 引用)
- size:内存大小(如 10m = 10MB),用于存储所有 key 的状态
rate=rate允许的平均请求速率,格式为:
- number r/s(每秒请求数)
- number r/m(每分钟请求数)
例如:rate=1r/srate=30r/m

在限流的时候,设置如(rate=10r/m)。不是代表着只要是在一分钟内就可以连续请求 10 次,而是把 10 次均摊到每分钟,也就是说按照左边的案例来算,6秒才能请求一次服务器共每分钟10次

limit_req 知识点:

格式:limit_req zone=name [burst=number] [nodelay] [delay=number];

参数说明
zone=name引用一个已通过 limit_req_zone 定义的共享内存区域(必需)
burst=number允许突发的请求数(即“桶容量”),默认为 0
nodelay若设置了 burst,加上此参数表示突发请求立即处理(不排队)
delay=number(高级)控制从第几个请求开始延迟(较少使用)

存放位置:

位置作用范围
http对所有请求生效(全局)
server对该虚拟主机(域名/IP+端口)下所有路径生效
location仅对匹配的 URI 路径生效

示例:

配置行为描述
limit_req zone=x;严格按 rate 放行。超过速率 → 立即返回 503(或自定义状态码)
limit_req zone=x burst=5;允许最多 1 + 5 = 6 个请求:
- 第 1 个立即处理
- 第 2~6 个排队等待(按 rate 逐个放行)
- 第 7 个及以上 → 拒绝
limit_req zone=x burst=5 nodelay;允许 6 个请求全部立即处理,之后严格限流(超速即拒)

burst 是“缓冲区”,不是“额外配额”。它用于吸收瞬时流量高峰,避免误杀正常用

limit_req_status 429 是 Nginx 中用于自定义限流拒绝响应状态码的指令