Nginx服务器限速功能(二)

定义有两个部分: zone= keyword标识的区域名称和冒号后面的大小。 大约16,000个IP地址的状态信息需要1兆字节,所以我们的区域可以存储大约160,000个地址。 如果Nginx需要添加一个新条目时,存储空间将被耗尽,它将删除最旧...

 定义有两个部分: zone= keyword标识的区域名称和冒号后面的大小。 大约16,000个IP地址的状态信息需要1兆字节,所以我们的区域可以存储大约160,000个地址。 如果Nginx需要添加一个新条目时,存储空间将被耗尽,它将删除最旧的条目。

timg.jpg

 
如果释放的空间不足以容纳新记录,则Nginx返回状态码503(Temporarily Unavailable) 。 此外,为了防止内存耗尽,每当Nginx创建一个新条目时,最多可以删除两个在前60秒内没有使用的条目。
 
Rate - 设置最大请求率。 在这个例子中,速率不能超过每秒10个请求。 Nginx实际上以毫秒粒度跟踪请求,所以这个限制对应于每100毫秒1个请求。 由于我们不允许爆发,这意味着如果请求在前一个允许的时间之后小于100毫秒时被拒绝。
 
limit_req_zone指令为速率限制和共享内存区域设置参数,但实际上并不限制请求速率。
 
因此,您需要通过在其中包含limit_req指令来将限制应用于特定location或server块。 在这个例子中,我们是对/login/的URI速率限制请求。
 
因此,现在每个唯一的IP地址被限制,/login/每秒10个请求 - 或者更确切地说,在前一个100毫秒内不能请求该URL。
 
处理并发
 
如果我们在100毫秒内得到两个请求会怎么样? 对于第二个请求,Nginx将状态码503返回给客户端。 这可能不是我们想要的,因为应用程序本质上是突发性的。
 
相反,我们想要缓冲任何多余的请求并及时提供服务。 这是我们使用burst参数limit_req ,在这个更新的配置:
 
burst参数定义了客户端可以超过区域指定的速率(使用我们的示例mylimit区域,速率限制为每秒10个请求,或每100毫秒1个)可以产生多少个请求。
 
在前一个请求到达100毫秒后的请求被放入一个队列中,这里我们将队列大小设置为20。
 
这意味着如果21个请求同时从一个给定的IP地址到达,Nginx立即将第一个请求转发到上游服务器组,并将剩下的20个放入队列中。 然后,它每100毫秒转发一个排队的请求,并且只有当传入的请求使排队请求的数量超过20时才返回503给客户端。
 
无延迟队列
 
具有burst的配置会导致流量畅通,但不是很实用,因为它可能会使您的网站显得很慢。
 

免责声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,也不承认相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,请发送邮件至:operations@xinnet.com进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

相关文章

免费咨询获取折扣