nginx limit_req限速設置


WIKI:

http://wiki.nginx.org/HttpLimitReqModule

漏桶原理(leaky bucket):

http://en.wikipedia.org/wiki/Leaky_bucket

實例:

01 #以用戶二進制IP地址,定義三個漏桶,滴落速率1-3req/sec,桶空間1m,1M能保持大約16000個(IP)狀態
02 limit_req_zone  $binary_remote_addr  zone=qps1:1m   rate=1r/s;
03 limit_req_zone  $binary_remote_addr  zone=qps2:1m   rate=2r/s;
04 limit_req_zone  $binary_remote_addr  zone=qps3:1m   rate=3r/s;
05  
06 server {
07  
08 #速率qps=1,峰值burst=5,延遲請求
09 #嚴格按照漏桶速率qps=1處理每秒請求
10 #在峰值burst=5以內的並發請求,會被掛起,延遲處理
11 #超出請求數限制則直接返回503
12 #客戶端只要控制並發在峰值[burst]內,就不會觸發limit_req_error_log
13 # 例1:發起一個並發請求=6,拒絕1個,處理1個,進入延遲隊列4個:
14 #time    request    refuse    sucess    delay
15 #00:01        6        1        1            4
16 #00:02        0        0        1            3
17 #00:03        0        0        1            2
18 #00:04        0        0        1            1
19 #00:05        0        0        1            0
20 location /delay {
21     limit_req   zone=qps1  burst=5;
22 }
23  
24 #速率qps=1,峰值burst=5,不延遲請求
25 #加了nodelay之后,漏桶控制一段時長內的平均qps = 漏桶速率,允許瞬時的峰值qps > 漏桶qps
26 #所以峰值時的最高qps=(brust+qps-1)=5
27 #請求不會被delay,要么處理,要么直接返回503
28 #客戶端需要控制qps每秒請求數,才不會觸發limit_req_error_log
29 # 例2:每隔5秒發起一次達到峰值的並發請求,由於時間段內平均qps=1 所以仍然符合漏桶速率:
30 #time    request     refuse    sucess
31 #00:01         5         0          5
32 #00:05         5         0          5
33 #00:10         5         0          5
34 # 例3:連續每秒發起並發請求=5,由於時間段內平均qps>>1,超出的請求被拒絕:
35 #time    request     refuse     sucess
36 #00:01         5         0           5
37 #00:02         5         4           1
38 #00:03         5         4           1
39  
40 location /nodelay {
41     limit_req   zone=qps1  burst=5 nodelay;
42 }
43  
44 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM