limit_req_zone
文法: limit_req_zone $variable zone=name:size rate=rate;
預設值: none
配置段: http
設定一塊共享記憶體限制域用來儲存鍵值的狀态參數。 特别是儲存了目前超出請求的數量。 鍵的值就是指定的變量(空值不會被計算)。如
1
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
說明:區域名稱為one,大小為10m,平均處理的請求頻率不能超過每秒一次。
鍵值是用戶端IP。
使用$binary_remote_addr變量, 可以将每條狀态記錄的大小減少到64個位元組,這樣1M的記憶體可以儲存大約1萬6千個64位元組的記錄。
如果限制域的存儲空間耗盡了,對于後續所有請求,伺服器都會傳回 503 (Service Temporarily Unavailable)錯誤。
速度可以設定為每秒處理請求數和每分鐘處理請求數,其值必須是整數,是以如果你需要指定每秒處理少于1個的請求,2秒處理一個請求,可以使用 “30r/m”。
limit_req_log_level
文法: limit_req_log_level info | notice | warn | error;
預設值: limit_req_log_level error;
配置段: http, server, location
設定你所希望的日志級别,當伺服器因為頻率過高拒絕或者延遲處理請求時可以記下相應級别的日志。 延遲記錄的日志級别比拒絕的低一個級别;比如, 如果設定“limit_req_log_level notice”, 延遲的日志就是info級别。
limit_req_status
文法: limit_req_status code;
預設值: limit_req_status 503;
該指令在1.3.15版本引入。設定拒絕請求的響應狀态碼。
limit_req
文法: limit_req zone=name [burst=number] [nodelay];
預設值: —
設定對應的共享記憶體限制域和允許被處理的最大請求數門檻值。 如果請求的頻率超過了限制域配置的值,請求處理會被延遲,是以所有的請求都是以定義的頻率被處理的。 超過頻率限制的請求會被延遲,直到被延遲的請求數超過了定義的門檻值,這時,這個請求會被終止,并傳回503 (Service Temporarily Unavailable) 錯誤。這個門檻值的預設值為0。如:
2
3
4
5
6
limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
server {
location /www.ttlsa.com/ {
limit_req zone=ttlsa_com burst=5;
}
}
限制平均每秒不超過一個請求,同時允許超過頻率限制的請求數不多于5個。
如果不希望超過的請求被延遲,可以用nodelay參數,如:
limit_req zone=ttlsa_com burst=5 nodelay;
7
8
9
10
http {
location ^~ /download/ {
limit_req zone=ttlsa_com burst=5;
alias /data/www.ttlsa.com/download/;
}
可能要對某些IP不做限制,需要使用到白名單。名單設定參見後續的文檔,我會整理一份以供讀者參考。請專注。
轉載:http://www.ttlsa.com/nginx/nginx-limiting-the-number-of-requests-ngx_http_limit_req_module-module/
本文轉自 亮公子 51CTO部落格,原文連結:http://blog.51cto.com/iyull/1864373