根据 limit_req_zone
的nginx文档一兆字节区域可以保留大约16,000个64字节状态。如果区域存储空间耗尽,服务器将向所有进一步的请求返回503(服务暂时不可用)错误。
我想知道这些区域被清除的方式是什么?例如,如果我们有像
那样的话limit_req_zone $binary_remote_addr zone=one:1m rate=1r/s;
并且每天唯一身份用户数超过16000 - 是否意味着该区域将会溢出而其他用户将开始在设置位置获得503错误?或者是否存在用户不活动的时间范围,之后将清除与用户相关的区域内存?
我主要关注的是设置最佳区域大小而不会有耗尽的风险 在高负荷的情况下。
答案 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)
如果 NGINX 需要添加新条目时存储空间耗尽,它会删除最旧的条目。如果释放的空间仍然不足以容纳新记录,NGINX 返回状态代码 503 (Service Temporarily Unavailable)
。此外,为了防止内存耗尽,每次 NGINX 创建一个新条目时,它都会删除最多两个在前 60 秒内未使用的条目。
>每天 16K 个条目没什么好担心的。 NGINX 会清理超过一分钟不活动的条目。
但是如果 active 条目的数量超过 16K,就会出现问题,因为 it might lose entries (and states) in use.