目录
目录X
联系信息 首页 /正文内容

Nginx 请求限制设置

AI摘要(BLUF)
1. 核心参数拆解假设你的配置是:limit_req_zone $binary_remote_addr zone=api_strict:10m rate=10r/m; Rate (速率)rate=10r/m:这意味着 Nginx 每 6 秒 才会产生一个“通行令牌”。如果不加 burst:用户每 6 秒只能点一次。如果他 1 秒内点了 2 下,第 2 下会直接报 503。这显然不符合现代网页加载 10 多个 API 的需求。Burst (突发容量)burst=12:这相当于在门口放了一个**“等候区”**,里面有 12 个座位。用法:当令牌还没产生时,多出来的请求可以先在座位上“坐着等”。生活……

1. 核心参数拆解


假设你的配置是:limit_req_zone $binary_remote_addr zone=api_strict:10m rate=10r/m;  


Rate (速率)


  • rate=10r/m:这意味着 Nginx 每 6 秒 才会产生一个“通行令牌”。

  • 如果不加 burst:用户每 6 秒只能点一次。如果他 1 秒内点了 2 下,第 2 下会直接报 503。这显然不符合现代网页加载 10 多个 API 的需求。


Burst (突发容量)


  • burst=12:这相当于在门口放了一个**“等候区”**,里面有 12 个座位。

  • 用法:当令牌还没产生时,多出来的请求可以先在座位上“坐着等”。

  • 生活例子:银行柜台每 6 秒办完一个人。突然来了 10 个人,如果没有 burst,剩下 9 人直接轰走;有了 burst=12,这 9 个人可以进大厅坐着等。


Nodelay (无延迟)


  • 核心作用:如果你不加 nodelay,排队的请求会严格按照 6 秒一个的速度慢慢处理,用户会感到网页加载极慢

  • 加上 nodelay:Nginx 会让坐在 burst 座位上的 12 个人立刻进去处理

  • 代价:这 12 个座位被占用了。如果这 12 个名额在 1 秒内用完,那么接下来的 6 秒内(直到产生新令牌),任何新请求都会被拒。

2. 还有哪些实用的用法?


除了你现在用的这一套,针对你这种“房产数据”场景,还有几个进阶配置:


A. Delay (延迟上限控制)


这是 Nginx 1.15.7 之后引入的“折中方案”,比 nodelay 更智能。
Nginx    limit_req zone=api_strict burst=20 delay=10;


  • 逻辑:前 10 个请求(delay 值)立刻处理,不等待。

  • 后续:第 11 到 第 20 个请求依然允许进入 burst 排队,但会强制它们排队等待(增加延迟感)。

  • 意义:让首屏加载非常快,但如果用户疯狂乱点,他会感觉到操作变慢了,起到“警告”作用。


B. 使用 $limit_req_status 自定义状态码


默认是 503,但你现在改成了 553。这在多层架构中非常有用,可以帮你一眼分辨出是 Nginx 拦的(553)还是后端 IIS 报错了。
Nginx    limit_req_status 429; # 429 Too Many Requests 是更标准的限流状态码


C. 结合多重限流(阶梯防御)


你可以同时应用多个限流池。例如:一个池限制单 IP 的总频率,另一个池限制单 IP 访问登录接口的频率。
Nginx    location /login.ashx {        limit_req zone=api_strict burst=5;      # 通用限流        limit_req zone=login_limit burst=2;     # 针对登录的额外严审        proxy_pass http://backend;    }


【打印正文】 发布时间:2026-04-08 22:11:28 浏览次数: 作者: 来源:本站原创