Nginx配置限流
Nginx有限流功能,是基于漏桶算法实现的
limit_req_zone是配置在http模块中的
#设置限流 zone用来定义ip状态和url访问频率的共享区域,其中mylimit为区域名称,冒号后为区域大小,16000个IP地址的状态信息大约是1M,rate为最大请求速率(如每分钟一个请求)
limit_req_zone $binary_remote_addr zone=mylimit:1m rate=1r/m;
limit_req是配置在location块、server块、http块中
# 请求限流 zone为上述定义的区域名称 burst为排队大小 nodelay表示不限制单个请求的延迟时间
limit_req zone=mylimit burst=10 nodelay;
burst作用
漏桶算法是匀速的,如上述的示例rate=1r/m,每分钟就只漏出一个请求,如果一分钟来了很多的请求,就只能处理一个,其他的都抛弃掉。
但是burst的配置可以使用FIFO队列可以将请求缓存起来,只有队列满了才会拒绝新的请求,默认情况下就算进了队列也是按照rate速率来执行的,每分钟执行一个
delay作用
由于排队执行,延迟大大增加,可以使用delay来进行设置,首先nodelay表示没有延迟,在队列里的也是直接就执行
由于没有延时了,导致同一时刻要同时处理漏出来的以及队列中的,那么如何控制并发数呢,可以使用delay来进行精确地配置
limit_req zone=mylimit burst=10 delay=5;
上述配置delay=5表示从队列中的第6个请求开始延时,这样可以控制并发的数量