一、語法
- limit_conn_module 連接頻率限制模塊
- limit_req_module 請求頻率限制模塊
(1) 連接限制語法
Syntax:limit_conn_zone key zone=name:size;
Default: --
Context: http
Syntax:limit_conn zone number;
Default:--
Context:http,server,location
(2) 請求限制語法
Syntax:limit_req_zone key zone=name:size rate=rate;
Default: --
Context: http
Syntax:limit_req zone=name [burst=numaber] [nodelay];
Default:--
Context: http,server,location
二、未對請求和連接做限制的壓力測試
(1)yum install -y ab 安裝壓力測試工具ab
(2)ab -n 50 -c 20 http://192.168.122.1/test.html 手動(dòng)壓力測試,總共發(fā)起50個(gè)請求,并發(fā)數(shù)為20
以下為無任何配置下的壓力測試結(jié)果,測試結(jié)果含義可參考這篇文章

三、對請求和連接做限制的壓力測試
(1)vi /etc/nginx/conf.d/default.conf 打開 default.conf 文件并添加配置

limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
釋意 : $binary_remote_addr 和 remote_addr 都是指客戶端地址,但是存儲remote_addr比存儲$binary_remote_addr 會(huì)多十個(gè)字節(jié),一個(gè)會(huì)話多十個(gè)字節(jié),成千上萬個(gè)會(huì)話就需要多出很多空間,故而使用$binary_remote_addr。
1m指的是:申請的空間大小為1M
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
釋意 :對于同一個(gè)remote_addr(客戶端地址)過來的請求,限制每秒只允許發(fā)起一個(gè)請求
limit_conn conn_zone 1
釋意 :連接限制,同一時(shí)刻,只允許一個(gè)ip連接
limit_req zone=req_zone burst=3 nodelay
釋意 :請求限制, burst=3 ,客戶端超過了指定的請求速率后,遺留的三個(gè)請求釋放到下一秒執(zhí)行(即對客戶端延遲響應(yīng)), nodelay:除了這3個(gè)請求外,其它超出的直接返回503(503:由于超載或停機(jī)維護(hù),服務(wù)器目前無法使用)
(2)接下來,可將四條注釋逐一取消進(jìn)行測試
以下為請求限制的測試:
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
...
location / {
root /opt/app/code;
# limit_conn conn_zone 1;
# limit_req zone=req_zone burst=3 nodelay;
# limit_req zone=req_zone burst=3;
limit_req zone=req_zone;
index index.html index.htm;
}
...
查看錯(cuò)誤日志 tail -f /var/log/nginx/error.log
