摘要:使用漏桶方法進行限制。過多的請求被延遲,直到它們的數量超過最大突發大小,在這種情況下請求以錯誤終止。設置要響應拒絕的請求而返回的狀態代碼。如果需要每秒少于一個請求的速率,則在每分鐘請求中指定。
模塊ngx_http_limit_req_module
主要用到的指令
limit_req limit_req_log_level limit_req_status limit_req_zone
所述ngx_http_limit_req_module模塊(0.7.21)用于限制每一個定義的鍵值的請求的處理速率,特別是從一個單一的IP地址的請求的處理速率。使用“漏桶”方法進行限制。
示例配置http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location / search / { limit_req zone=one burst=5; }指令
句法: limit_req zone=name [burst=number] [nodelay | delay=number];
默認: -
語境: http,server,location
設置共享內存區域和請求的最大突發大小。如果請求速率超過為區域配置的速率,則延遲處理,以便以定義的速率處理請求。過多的請求被延遲,直到它們的數量超過最大突發大小,在這種情況下請求以錯誤終止。默認情況下,最大突發大小等于零。例如,指令
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location / search / { limit_req zone=one burst=5; }
平均每秒允許不超過1個請求,突發不超過5個請求。
如果不希望在請求受限的情況下延遲過多的請求,nodelay則應使用以下參數:
limit_req zone=one burst=5 nodelay;
delay參數(1.15.7)指定在該過度請求成為被延遲請求的最大值。默認值為零,即所有過多的請求都會延遲。
可以有多個limit_req指令。例如,以下配置將限制來自單個IP地址的請求的處理速率,同時限制虛擬服務器的請求處理速率:
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s; limit_req_zone $server_name zone=perserver:10m rate=10r/s; server { ... limit_req zone=perip burst=5 nodelay; limit_req zone=perserver burst=10; }
當且僅當limit_req 當前級別沒有指令時,這些指令才從先前級別繼承 。
句法: limit_req_log_level info | notice | warn | error;
默認:
limit_req_log_level錯誤;
語境: http,server,location
該指令出現在0.8.18版本中。
為服務器因速率超過或延遲請求處理而拒絕處理請求的情況設置所需的日志記錄級別。延遲的記錄水平比拒絕的記錄水平低一個點; 例如,如果limit_req_log_level notice指定了“ ”,則會使用info級別記錄延遲。
句法: limit_req_status code;
默認:
limit_req_status 503;
語境: http,server,location
該指令出現在1.3.15版本中。
設置要響應拒絕的請求而返回的狀態代碼。
句法: limit_req_zone key zone=name:size rate=rate [sync];
默認: -
語境: http
設置共享內存區域的參數,該區域將保留各種鍵的狀態。特別是,狀態存儲當前的過多請求數。該key可以包含文本,變量,他們的組合。具有空鍵值的請求不計算在內。
在1.7.6版之前,鍵值 key可以只包含一個變量。
用法示例:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
這里,狀態保持在10兆字節區域“one”,并且該區域的平均請求處理速率不能超過每秒1個請求。
客戶端IP地址用作鍵值。需要注意的是,而不是$remote_addr,該 $binary_remote_addr變量在這里使用。$binary_remote_addr對于IPv4地址,變量的大小始終為4個字節,對于IPv6地址,變量的大小始終為16個字節。存儲狀態在32位平臺上總是占用64個字節,在64位平臺上占用128個字節。一兆字節區域可以保留大約16,000個64字節狀態或大約8千個128字節狀態。
如果區域存儲空間耗盡,則刪除最近最少使用的狀態。即使在此之后無法創建新狀態,該請求也會因錯誤而終止。
速率以每秒請求數(r/s)指定。如果需要每秒少于一個請求的速率,則在每分鐘請求(r/m)中指定。例如,每秒半請求為30r/m。
的sync參數(1.15.3)使 同步 共享存儲器區。
該sync參數作為Nginx Plus商業訂閱的一部分提供 。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40411.html
摘要:現在有許多初學者學習網絡爬蟲,但他們不懂得控制速度,導致服務器資源浪費。通過的簡單配置,能過濾一小部分這類爬蟲。參考限制某個同一時間段的訪問次數首發地址使用過濾網絡爬蟲蜻蜓代理 現在有許多初學者學習網絡爬蟲,但他們不懂得控制速度,導致服務器資源浪費。通過 Nginx 的簡單配置,能過濾一小部分這類爬蟲。 方法一:通過 User-Agent 過濾 Nginx 參考配置如下: lo...
摘要:將延遲處理此類請求,直到存儲區共享存儲區已滿。因此,如果目標是阻止下載速度大于指定值,則連接數也應該受到限制。以下示例顯示了用于限制連接數和帶寬的組合配置。 原文鏈接:何曉東 博客 前置條件:nginx 需要有 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊,可以使用命令 2>&1 nginx -V | tr ...
摘要:將延遲處理此類請求,直到存儲區共享存儲區已滿。因此,如果目標是阻止下載速度大于指定值,則連接數也應該受到限制。以下示例顯示了用于限制連接數和帶寬的組合配置。 原文鏈接:何曉東 博客 前置條件:nginx 需要有 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模塊,可以使用命令 2>&1 nginx -V | tr ...
摘要:限流算法最簡單粗暴的限流算法就是計數器法了,而比較常用的有漏桶算法和令牌桶算法計數器計數器法是限流算法里最簡單也是最容易實現的一種算法。 運營研發團隊 李樂 高并發系統有三把利器:緩存、降級和限流; 限流的目的是通過對并發訪問/請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務(定向到錯誤頁)、排隊等待(秒殺)、降級(返回兜底數據或默認數據); 高并發系統常見的限流有:限制總并發...
閱讀 2672·2021-11-18 10:02
閱讀 3402·2021-09-28 09:35
閱讀 2586·2021-09-22 15:12
閱讀 741·2021-09-22 15:08
閱讀 3071·2021-09-07 09:58
閱讀 3464·2021-08-23 09:42
閱讀 725·2019-08-30 12:53
閱讀 2072·2019-08-29 13:51