nginx配置訪問頻率


nginx可以通過limit_conn_zone和limit_req_zone兩個組件來限制客戶端訪問服務端的目錄和文件的頻率和次數,能夠抵擋住部分cc、ddos攻擊。

限制訪問頻率:

http{
    ...

    #定義一個名為allips的limit_req_zone用來存儲session,大小是10M內存,
    #以$binary_remote_addr 為key,限制平均每秒的請求為20個,
    #1M能存儲16000個狀態,rete的值必須為整數,
    #如果限制兩秒鍾一個請求,可以設置成30r/m

    limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
    ...
    server{
        ...
        location {
            ...

            #限制每ip每秒不超過20個請求,漏桶數burst為5
            #brust的意思就是當每秒超過20個請求時,5個以內的請求會被延遲訪問,超過5個的直接返回503
            #nodelay,設置該選項,將嚴格使用平均速率限制請求數,超過請求頻率的直接返回503
            limit_req zone=allips burst=5 nodelay;
            ...
        }
        ...
    }
    ...
}

#注意配置的作用域

注意:發送請求頻率高於(1000ms/20r)ms/r 直接返回503

限制並發連接數:

http{
    ...

    #定義一個名為all_zone的limit_zone,大小10M內存來存儲session,
    #nginx 1.18以后用limit_conn_zone替換了limit_conn
    limit_conn_zone   all_zone  $binary_remote_addr  10m;  
    ...
    server{
        ...
        location {
            ...
           limit_conn all_zone 20;          #連接數限制

           #帶寬限制,對單個連接限數,限制帶寬上限500k
           limit_rate 500k;            

            ...
        }
        ...
    }
    ...
}

配置訪問白名單:

nginx需支持geo模塊;

http{
    ...
geo  $limited  {
        default 1;
        127.0.0.1 0;
        172.31.105.247/32 0;
        include /etc/nginx/whiteip;
    }
map $limited $limit   {
    1 $binary_remote_addr;
    0 "";
}
limit_req_zone $limit zone=allips:20m rate=100r/m;
    ...
    server{
        ...
        location {
            ...
           limit_req zone=allips burst=100 ;                   
            ...
        }
 
}
/etc/nginx/whiteip:
18.195.104.195/32 0;
18.196.102.154/32 0;
54.93.227.18/32 0;

如果nginx上層還有ELB(aws)或SLB(aliyun),需在nginx配置中添加:

set_real_ip_from  172.31.0.0/16;  
real_ip_header    X-Forwarded-For;  
real_ip_recursive on;
#配置對於從172.31.0.0/16 這個ip段過來的請求,remote_addr的字段的值從
X-Forwarded-For 中取


免責聲明!

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



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