利用Nginx模块进行请求限制——limit_conn_module、limit_req_module

环境:
CentOS7
Nginx 1.16.0

Nginx的请求限制

有两个模块:
连接频率限制: limit_conn_module
请求频率限制: limit_req_module


配置语法:

limit_conn_module

Syntax: limit_conn_zone key zone=name:size;
Default: ——
Context: http

zone为存储连接状态的一块空间, key为限制关键点, 比如remote_addr, 即限制ip地址, name 为zone空间的名字, size为空间的大小。

Syntax: limit_conn zone number;
Default: ——
Context: http, server, location;

相当于调用前者的定义, 选择zone,number为具体限制数字。


limit_req_module

Syntax: limit_req_zone key zone=name:size rate=rate;
Default: ——
Context: http

rate=1r/s:表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,即每秒只处理一个请求,还可以有比如30r/m的,即限制每2秒访问一次,即每2秒才处理一个请求。

Syntax: limit_req zone=name [burst = number] [nodelay];
Default:——
Context: http, server, location

burst:重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有5个,超过的请求会直接报503的错误然后返回。

nodelay:
如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况。(这里的rate的单位是:r/s)
如果没有设置,则所有请求会依次等待排队


注: 在具体配置中, $binary_remote_addr可节省内存使用量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章