nginx請求頻率限制模塊ngx_http_limit_req_module


模塊: ngx_http_limit_req_module

作用: 限制客戶端請求頻率,防止惡意攻擊

配置示例:

http {
    limit_req_zone $binary_remote_addr zone=req_perip:50m rate=10r/s;

    ...

    server {

        ...

        location /api/ {
                limit_req zone=req_perip burst=50 nodelay;
                limit_req_status 503;
        }
    }
}

說明: 示例中定義的區域名稱為req_peripzone=req_perip,分配內存大小為50m(如果限制域的存儲空間耗盡了,對於后續所有請求,服務器都會返回 503同一個ip$binary_remote_addr平均處理的請求頻率不能超過每秒10次rate=10r/s 如果超過每秒10次但超過的請求數量小於等於50burst=50時,會延遲請求。如果超過每秒10次的請求數超過50,則立即返回503limit_req_status 503給客戶端

 

涉及指令:

  limit_req_zone

  limit_req

  limit_req_status 

  limit_req_log_level 

 

指令詳解:

limit_req_zone

語法: limit_req_zone key zone=name:size rate=rate; (可理解為該指令用來定義限制請求頻率) 
可配置區域: http 

key: 必選項;取值范圍: 1,text(文本); 2,nginx變量;3,text和nginx變量的組合; 注: 1.7.6版本之前取值只能是nginx變量

name: 必選項;自定義字符串

size: 必選項;分配內存大小,用來保存鍵值的狀態參數

rate: 必選項;每秒可請求的頻率(r/s), 或每分鍾可請求的頻率(r/m)

  

limit_req 

語法: limit_req zone=name [burst=number] [nodelay]; (可理解為使用定義的限制請求頻率,一定是先定義后使用!也就是一定要有limit_req_zone指令的配置后才能使用該配置)
可配置區域: http, server, location 

name: 必選項;自定義字符串, 名字必須與limit_req_zone中zone=name這個名字一致

number: 必選項;正整數數字, 平均每秒允許不超過limit_req_zone指令中rate規定的請求數,並且不會超過該值所指定數量的請求, 可延遲請求的數量

nodelay: 可選配置, 表示請求頻率超過rate規定值后又超過burst規定值后立即返回客戶端503(可設置返回code)

  

limit_req_status 

語法: limit_req_status code;
默認值: 503
可配置區域: http, server, location

表示超出limit_req配置的請求數量后返回給客戶端的錯誤碼

使用該指令最低版本 1.3.15

  

limit_req_log_level

語法: limit_req_log_level info | notice | warn | error;
默認值: limit_req_log_level error;
可配置區域: http, server, location

當服務器拒絕處理由於速率超過或延遲請求處理而拒絕處理請求時,設置所需的日志記錄級別。

最低版本: 0.8.18

  

常見錯誤:

  nginx: [emerg] zero size shared memory zone "oneip"

   出現此錯誤都是因為在未指定limit_req_zone指定就使用了limit_req指令的原因(或者limit_req中的name值和limit_req_zone中定義的name值不一致) 

 


免責聲明!

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



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