burst参数是nginx限流中应对突发流量的关键缓冲队列,本质为漏桶的“临时容量”;rate=10r/s表示每100ms处理1个请求,burst=20允许额外20个请求立即或排队处理,搭配nodelay可实现前30个请求均立即放行,超量则503拒绝。

burst 参数是 Nginx 限流中应对突发流量的关键,它不是用来“放大”限流阈值,而是为短时激增的请求提供一个缓冲队列。设置合理,能避免用户点击就报错;设得过大或过小,反而会引发延迟堆积或拦截过度。
burst 的本质是漏桶的“临时容量”
rate=10r/s 表示每秒最多处理 10 个请求,相当于每 100ms 放行 1 个。但真实场景中,用户可能在 100ms 内发起 8 个请求(比如快速刷新、表单连点)。没有 burst,第 11 个起直接 503;加上 burst=20,这 8 个请求全进队列,后续按 100ms 一个匀速消化——只要队列没满,就不丢请求。
注意:burst 队列是 FIFO,不设 nodelay 时,排队请求会延迟执行;设了 nodelay,队列就变成“立即放行+硬拦截”的混合模式(后文说明)。
burst 值怎么定?看业务容忍窗口和内存开销
burst 不是越大越好。要结合两个现实约束来估算:
- 业务响应时间容忍度:比如你要求所有请求在 1 秒内返回,rate=10r/s 时,每个请求间隔 100ms,那么 burst 最多设为 10(10 × 100ms = 1s)。若 burst=50,最后一个排队请求要等 5 秒,用户早已放弃。
- 内存占用限制:每个 IP 在 burst 队列中会占用约 128 字节状态。10MB zone 可存约 8 万个 IP 状态。如果你预估峰值有 5000 个活跃 IP,每个 burst=20,实际内存压力不大;但若 burst 设到 200,就要警惕 zone 内存溢出导致限流失效。
burst 必须搭配 nodelay 才真正防“卡顿”
单独写 burst=20 会让超出 rate 的请求排队等待,看似不丢,实则埋下长尾延迟隐患。更实用的组合是:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
limit_req zone=api_limit burst=20 nodelay;
它的效果是:
- 前 10 个请求(rate 范围内)立即处理;
- 接下来 20 个请求(burst 范围内)也立即处理,不排队;
- 第 31 个及以后的请求,直接返回 503(或自定义状态码)。
这就把“缓冲”变成了“弹性接纳”,既扛住了瞬时洪峰,又不拖慢正常请求——这才是防突发流量的正确姿势。
典型配置示例(可直接用)
针对 API 接口做稳健限流:
http {limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://backend;
}
}
}
其中 burst=20 是经过压测验证的常见起点值,上线后可根据监控中的 503 比率和平均响应时间微调。










