HTTP Limit Requests模块(HTTP Limit Requests)
·摘要
这个模块允许为一个指定的会话或者某个特殊情况限制请求数目。
·示例配置
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
server {
...
location /search/ {
limit_req zone=one burst=5;
}
·指令
语法:limit_req_zone $session_variable zone=name_of_zone:size rate=rate
默认值:none
使用字段:http
指令描述会话状态存储区域。
指令描述会话状态存储的某个区域,会话的值根据给定的变量,如下例:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
在这种情况下,将为一个名为“one”的区域分配10MB,这个区域的平均查询速度为每秒最多1个请求。
会话将追踪每个用户,但是注意它替换了变量$remote_addr,我们使用的是$binary_remote_addr,减少会话的大小为64字节,一个1MB的区域可以包含大约16000个会话状态。
速度可以设置为每秒处理请求数和每分钟处理请求数,其值必须是整数,所以如果你需要指定每秒处理少于1个的请求,2秒处理一个请求,可以使用 "30r/m"。
当会话状态储存区域为1M时理论上可以处理32000个会话,每个会话大小为32字节。
语法: limit_req zone=zone burst=burst [nodelay]
默认值:none
使用字段:http, server, location
这个指令指定区域(zone)可能的最大请求爆发值(burst),如果其值超过这个数,请求被延时,以便查询按照给定的速度处理。多余的请求将被延迟直到他们的数目小于burst值,在这种情况下,请求将得到"Service unavailable" (503)代码,默认burst的值为0。
如下例:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location /search/ {
limit_req zone=one burst=5;
}
允许一个用户平均每秒处理不超过1个请求,这个区域最多同时处理不超过5个查询,如果在burst值之外的额外请求不可用,可以使用nodelay参数:
limit_req zone=one burst=5 nodelay;
·参考文档