Nginx的limit_req限速設置(不適用於有CDN的站)

備註:此方法不適用於有CDN的站,限制的ip是cdn的節點ip

limit_req zone=req_zone;
嚴格依照在limti_req_zone中配置的rate來處理請求
超過rate處理能力範圍的,直接drop
表現爲對收到的請求無延時

limit_req zone=req_zone burst=5;
依照在limti_req_zone中配置的rate來處理請求
同時設置了一個大小爲5的緩衝隊列,在緩衝隊列中的請求會等待慢慢處理
超過了burst緩衝隊列長度和rate處理能力的請求被直接丟棄
表現爲對收到的請求有延時

limit_req zone=req_zone burst=5 nodelay;
依照在limti_req_zone中配置的rate來處理請求
同時設置了一個大小爲5的緩衝隊列,當請求到來時,會爆發出一個峯值處理能力,對於峯值處理數量之外的請求,直接丟棄
在完成峯值請求之後,緩衝隊列不能再放入請求。如果rate=10r/m,且這段時間內沒有請求再到來,則每6 s 緩衝隊列就能回覆一個緩衝請求的能力,直到回覆到能緩衝5個請求位置。
--------------------------------------------------------------------------------------------

參數解讀:

nginx中該模塊的使用配置示例

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 
server { 
    location  /search/ { 
        limit_req zone=one burst=5 nodelay; 
    }


第一段配置參數

$binary_remote_addr :表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫內存佔用量,是限制同一客戶端ip地址
zone=one:10m:表示生成一個大小爲10M,名字爲one的內存區域,用來存儲訪問的頻次信息
rate=1r/s:表示允許相同標識的客戶端的訪問頻次,這裏限制的是每秒1次,即每秒只處理一個請求,還可以有比如30r/m的,即限制每2秒訪問一次,即每2秒才處理一個請求
 

第二段配置參數

zone=one :設置使用哪個配置區域來做限制,與上面limit_req_zone 裏的name對應
burst=5:重點說明一下這個配置,burst爆發的意思,這個配置的意思是設置一個大小爲5的緩衝區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩衝區內等待,但是這個等待區裏的位置只有5個,超過的請求會直接報503的錯誤然後返回。
nodelay
如果設置,會在瞬時提供處理(burst + rate)個請求的能力,立即處理,請求超過(burst + rate)的時候就會直接返回503,永遠不存在請求需要等待的情況。(這裏的rate的單位是:r/s)
如果沒有設置,則所有請求會依次等待排隊
更多詳情:https://blog.csdn.net/hellow__world/article/details/78658041

發佈了30 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章