Nginx限制IP并發連接數及每秒處理請求數

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

這兩個模塊在Nginx中已內置, 在nginx.conf文件中加入相應的配置即可使用。

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

http {
     #geot和map兩段用于處理限速白名單,map段映射名單到$limit,處于geo內的IP將被映射為空值,否則為其IP地址。
     #limit_conn_zone和limit_req_zone指令對于鍵為空值的將會被忽略,從而實現對于列出來的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的并發連接數量
     #設置一個緩存區保存不同key的狀態,大小10m。使用$limit來作為key,以此限制每個源IP的鏈接數
     limit_conn_zone $limit  zone=perip:10m;
     
     
     #limit_req_zone定義每個IP的每秒請求數量
     #設置一個緩存區reqps保存不同key的狀態,大小10m。這里的狀態是指當前的過量請求數。
     #$limit為空值則不限速,否則對應的IP進行限制每秒5個連接請求。
     limit_req_zone  $limit  zone=reqps:10m rate=5r/s;

      
 
     server {
        listen     80;
        server_name   www.domain.com;
 
        #只對PHP頁面的請求進行限速
        location ~ [^/]\.php(/|$)
        {
            #對應limit_conn_zone塊
            #限制每IP的PHP頁面請求并發數量為5個
            limit_conn perip 5; 
           
            #對應limit_req_zone塊
            #限制每IP的每秒的PHP頁面請求次數為上面定義的rate的值:每秒5個請求,不延遲      
            limit_req zone=reqps nodelay;
        }
     }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容