Nginx模塊之limit_conn & limit_req


limit_conn模塊

生效階段:NGX_HTTP_PREACCESS_PHASE階段

生效范圍:全部worker進程(基於共享內存),進入preaccess階段前不生效,限制的有效性取決於key的設計:依賴postread階段的realip模塊取到真實ip

指令

limit_req模塊

指令

限制發生時向客戶端返回的錯誤碼

Syntax:	limit_req_status code;
Default:	limit_req_status 503;
Context:	http, server, location

limit_req 與 limit_conn 配置同時生效時, limit_req有效

Example

http {
    geo $limit {
        default 1;
        10.0.0.0/8 0;
        192.168.0.0/64 0;
    }
    
    map $limit $limit_key {
        0 "";
        1 $binary_remote_addr;
    }
    
    limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;
    
    server {
        location / {
            limit_req zone=req_zone burst=10 nodelay;
        }
    }
}

這個例子同時使用了geo和map指令。geo塊將給在白名單中的IP地址對應的$limit變量分配一個值0,給其它不在白名單中的分配一個值1。然后我們使用一個映射將這些值轉為key,如下:

如果$limit變量的值是0,$limit_key變量將被賦值為空字符串

如果$limit變量的值是1,$limit_key變量將被賦值為客戶端二進制形式的IP地址

兩個指令配合使用,白名單內IP地址的$limit_key變量被賦值為空字符串,不在白名單內的被賦值為客戶端的IP地址。當limit_req_zone后的第一個參數是空字符串時,不會應用“流量限制”,所以白名單內的IP地址(10.0.0.0/8和192.168.0.0/24 網段內)不會被限制。其它所有IP地址都會被限制到每秒5個請求。

limit_req指令將限制應用到/的location塊,允許在配置的限制上最多超過10個數據包的突發,並且不會延遲轉發。


免責聲明!

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



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