Nginx 模塊之 ngx_http_limit_req_module 請求處理模塊用法

上一篇文章咱們說到了ngx_http_limit_conn_module 模塊,來限制併發鏈接數。那麼請求數的限制該怎麼作呢?這就須要經過ngx_http_limit_req_module 模塊來實現,該模塊能夠經過定義的 鍵值來限制請求處理的頻率。特別的,能夠限制來自單個IP地址的請求處理頻率。 限制的方法如同漏斗,每秒固定處理請求數,推遲過多請求。以此來防止應用層的DDOS*** 。node

ngx_http_limit_req_module 模塊是 0.7.21版本後新增的模塊,默認已經安裝。bash


limit_req_zone服務器

語法: limit_req_zone  $variable  zone=name:size  rate=rate;併發

默認值:  -ide

使用環境: httpspa

http {
    limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

    ...

    server {

        ...

        location /search/ {
            limit_req zone=req_one burst=5;
        }

說明:定義一個請求限制組,組名爲req_one ,共享內存爲10M,單個基數是以$binary_remote_addr來計算,處理方式爲 每秒1次。日誌

若是限制域的存儲空間耗盡了,對於後續全部請求,服務器都會返回默認 503 (Service Temporarily Unavailable)錯誤。
code


limit_reqserver

語法: limit_req zone=name [burst=number] [nodelay];內存

默認值:—

使用環境: http, server, location

設置對應的限制域容許被處理的最大請求數閾值。 若是請求的頻率超過了限制域配置的值,請求處理會被延遲,因此全部的請求都是以定義的頻率被處理的。 超過頻率限制的請求會被延遲,直到被延遲的請求數超過了定義的閾值,這時,這個請求會被終止,並返回默認503 (Service Temporarily Unavailable) 錯誤。這個閾值的默認值爲0。

若是但願超過限制數的鏈接不被延時,那麼後面能夠跟上 nodelay 參數。

上面的例子: limit_req   zone=req_one  burst=5  nodelay;


limit_req_log_level

語法: limit_req_log_level info | notice | warn | error;

默認值: limit_req_log_level  error;

使用環境: http, server, location

這個指令在 0.8.18版本後被添加。

設置你所但願的日誌級別,默認值爲error級別,當服務器由於頻率太高拒絕或者延遲處理請求時能夠記下相應級別的日誌。 延遲記錄的日誌級別比拒絕的低一個級別;好比, 若是設置「limit_req_log_level notice」, 延遲的日誌就是info級別。


limit_req_status

語法: limit_req_status  code;

默認值: limit_req_status  503;

使用環境:http, server, location

該指令在1.3.15版本後被添加。

設置拒絕請求的響應代碼,默認值爲503.

相關文章
相關標籤/搜索