nginx:如何清除limit_req_zone区域?

时间:2014-01-16 18:23:44

标签: nginx throttling

根据 limit_req_zone

的nginx文档
  

一兆字节区域可以保留大约16,000个64字节状态。如果区域存储空间耗尽,服务器将向所有进一步的请求返回503(服务暂时不可用)错误。

我想知道这些区域被清除的方式是什么?例如,如果我们有像

那样的话
limit_req_zone $binary_remote_addr zone=one:1m rate=1r/s;

并且每天唯一身份用户数超过16000 - 是否意味着该区域将会溢出而其他用户将开始在设置位置获得503错误?或者是否存在用户不活动的时间范围,之后将清除与用户相关的区域内存?

我主要关注的是设置最佳区域大小而不会有耗尽的风险 在高负荷的情况下。

2 个答案:

答案 0 :(得分:2)

应该检查,但据我所知,区域项的生命周期与活动连接有关 因此zone=one:1m可以在当前(同时)活动连接中保留 16 K个唯一IP (此时活动连接的总数可超过16 K,因为可以从同一个IP打开一些连接。) 因此,mb中的区域大小应该> =来自唯一IP / 16K的同时连接的数量。

注意如果用户通过NAT共享单个IP(通常是USSR提供商),那么您将限制用户群的请求频率,这对他们来说非常不方便,所以要处理这种情况你应该设置 rate = simult_users_with_same_ip r / s

答案 1 :(得分:0)

来自https://www.nginx.com/blog/rate-limiting-nginx

<块引用>

如果 NGINX 需要添加新条目时存储空间耗尽,它会删除最旧的条目。如果释放的空间仍然不足以容纳新记录,NGINX 返回状态代码 503 (Service Temporarily Unavailable)。此外,为了防止内存耗尽,每次 NGINX 创建一个新条目时,它都会删除最多两个在前 60 秒内未使用的条目。

>每天 16K 个条目没什么好担心的。 NGINX 会清理超过一分钟不活动的条目。

但是如果 active 条目的数量超过 16K,就会出现问题,因为 it might lose entries (and states) in use.