利用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可節省內存使用量

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