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