Nginx學習(十一) Nginx限流

對應nginx接入層限流可以使用Nginx自帶的兩個模塊:

  • 連接數限流模塊ngx_http_limit_conn_module:
  • 漏桶算法實現的請求限流模塊ngx_http_limit_req_module

一、ngx_http_limit_conn_module
1、併發連接限制

http
{
    ...
    limit_conn_zone $binary_remote_addr zone=aming:10m;
    ...
    server
    {
        ...
        limit_conn aming 10;
        ...   
    }
}

說明:首先用limit_conn_zone定義了一個內存區塊索引aming,大小爲10m,它以$binary_remote_addr作爲key。
該配置只能在http裏面配置,不支持在server裏配置。

limit_conn 定義針對aming這個zone,併發連接爲10個。
注意,這個10指的是單個IP的併發最多爲10個。

2、速率限制

location ~ /download/ {
    ...
    limit_rate_after 512k;
    limit_rate 150k;
    ...
}

說明:limit_rate_after定義當一個文件下載到指定大小(本例中爲512k)之後開始限速;
limit_rate 定義下載速度爲150k/s。

注意:這兩個參數針對每個請求限速。

二、ngx_http_limit_req_module

http {
    geo $limited {
        default 1;
        127.0.0.1/32 0;
        192.168.10.0/24 0;
    }

    map $limited $limit {
        1 $binary_remote_addr;
        0 "";
    }
    
    limit_req_zone $limit zone=aming:10m rate=1r/s;

    server {
        location  ^~ /download/ {  
            limit_req zone=aming burst=5;
        }
    }
}

geo和map模塊實現了對127.0.0.1和192.168.10.0地址段的白名單設置。

limit_req_zone $limit zone=aming:10m rate=1r/s; 實現限制平均每秒不超過一個請求。
limit_req zone=aming burst=5;實現允許超過頻率限制的請求數不多於5個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章