Nginx限制IP并發(fā)連接數(shù)及每秒處理請求數(shù)

為了防止服務(wù)器被惡意采集或ddos攻擊給搞死, 所以給限個速。
這里主要使用Nginx的ngx_http_limit_req_module和ngx_http_limit_conn_module來控制訪問量.

這兩個模塊在Nginx中已內(nèi)置, 在nginx.conf文件中加入相應(yīng)的配置即可使用。

如下所示(附帶白名單功能),對所有的PHP頁面的請求進(jìn)行限速:

http {
     #geot和map兩段用于處理限速白名單,map段映射名單到$limit,處于geo內(nèi)的IP將被映射為空值,否則為其IP地址。
     #limit_conn_zone和limit_req_zone指令對于鍵為空值的將會被忽略,從而實現(xiàn)對于列出來的IP不做限制
     geo $whiteiplist  {
        default 1;
        127.0.0.1 0;
        121.199.16.249 0;
     }
     map $whiteiplist  $limit {
        1 $binary_remote_addr;
        0 "";
     }
     
     #limit_conn_zone定義每個IP的并發(fā)連接數(shù)量
     #設(shè)置一個緩存區(qū)保存不同key的狀態(tài),大小10m。使用$limit來作為key,以此限制每個源IP的鏈接數(shù)
     limit_conn_zone $limit  zone=perip:10m;
     
     
     #limit_req_zone定義每個IP的每秒請求數(shù)量
     #設(shè)置一個緩存區(qū)reqps保存不同key的狀態(tài),大小10m。這里的狀態(tài)是指當(dāng)前的過量請求數(shù)。
     #$limit為空值則不限速,否則對應(yīng)的IP進(jìn)行限制每秒5個連接請求。
     limit_req_zone  $limit  zone=reqps:10m rate=5r/s;

      
 
     server {
        listen     80;
        server_name   www.domain.com;
 
        #只對PHP頁面的請求進(jìn)行限速
        location ~ [^/]\.php(/|$)
        {
            #對應(yīng)limit_conn_zone塊
            #限制每IP的PHP頁面請求并發(fā)數(shù)量為5個
            limit_conn perip 5; 
           
            #對應(yīng)limit_req_zone塊
            #限制每IP的每秒的PHP頁面請求次數(shù)為上面定義的rate的值:每秒5個請求,不延遲      
            limit_req zone=reqps nodelay;
        }
     }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容