歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Nginx限制請求數ngx

Nginx限制請求數ngx

日期:2017/2/27 15:49:23   编辑:Linux教程

一. 前言

在《nginx限制連接數ngx_http_limit_conn_module模塊》 我們說到了ngx_http_limit_conn_module 模塊,來限制連接數。那麼請求數的限制該怎麼做呢?這就需要通過ngx_http_limit_req_module 模塊來實現,該模塊可以通過定義的 鍵值來限制請求處理的頻率。特別的,可以限制來自單個IP地址的請求處理頻率。 限制的方法如同漏斗,每秒固定處理請求數,推遲過多請求。

二. ngx_http_limit_req_module模塊指令

limit_req_zone
語法: limit_req_zone $variable zone=name:size rate=rate;
默認值: none
配置段: http
設置一塊共享內存限制域用來保存鍵值的狀態參數。 特別是保存了當前超出請求的數量。 鍵的值就是指定的變量(空值不會被計算)。如:

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;
配置段: http, server, location
該指令在1.3.15版本引入。設置拒絕請求的響應狀態碼。

limit_req
語法: limit_req zone=name [burst=number] [nodelay];
默認值: —
配置段: http, server, location
設置對應的共享內存限制域和允許被處理的最大請求數阈值。 如果請求的頻率超過了限制域配置的值,請求處理會被延遲,所以所有的請求都是以定義的頻率被處理的。 超過頻率限制的請求會被延遲,直到被延遲的請求數超過了定義的阈值,這時,這個請求會被終止,並返回503 (Service Temporarily Unavailable) 錯誤。這個阈值的默認值為0。如:

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;

三. 完整實例配置

http {
    limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
 
    server {
        location  ^~ /download/ { 
            limit_req zone=ttlsa_com burst=5;
            alias /data/www.ttlsa.com/download/;
        }
    }
}

可能要對某些IP不做限制,需要使用到白名單。名單設置參見後續的文檔,我會整理一份以供讀者參考。請專注。

原文:http://www.ttlsa.com/html/3185.html

Copyright © Linux教程網 All Rights Reserved