Nginx限制某個IP同一時間段的鏈接次數和請求數

Nginx限制某個IP同一時間段的鏈接次數和請求數

nginx能夠經過ngx_http_limit_conn_module和ngx_http_limit_req_module配置來限制ip在同一時間段的訪問次數.html

ngx_http_limit_conn_module:該模塊用於限制每一個定義的密鑰的鏈接數,特別是單個IP​​地址的鏈接數.使用limit_conn_zone和limit_conn指令.node

ngx_http_limit_req_module:用於限制每個定義的密鑰的請求的處理速率,特別是從一個單一的IP地址的請求的處理速率。使用「泄漏桶」方法進行限制.指令:limit_req_zone和limit_req.nginx

 

ngx_http_limit_conn_module:限制單個IP的鏈接數示例服務器

複製代碼

http { 
    limit_conn_zone $binary_remote_addr zone=addr:10m; 
    
   #定義一個名爲addr的limit_req_zone用來存儲session,大小是10M內存,
    #以$binary_remote_addr 爲key,
    #nginx 1.18之後用limit_conn_zone替換了limit_conn,
    #且只能放在http{}代碼段.

    ... 

    server { 

        ... 

        location /download/ { 
            limit_conn addr 1;   #鏈接數限制
            #設置給定鍵值的共享內存區域和容許的最大鏈接數。超出此限制時,服務器將返回503(服務臨時不可用)錯誤.
       #若是區域存儲空間不足,服務器將返回503(服務臨時不可用)錯誤


        }

複製代碼

 

可能有幾個limit_conn指令,如下配置將限制每一個客戶端IP與服務器的鏈接數,同時限制與虛擬服務器的總鏈接數session

 

複製代碼

http { 
    limit_conn_zone $binary_remote_addr zone=perip:10m; 
    limit_conn_zone $server_name zone=perserver:10m 

    ... 

    server { 

        ... 

        limit_conn perip 10;       #單個客戶端ip與服務器的鏈接數.
        limit_conn perserver 100;  #限制與服務器的總鏈接數

        }

複製代碼

 

參考文檔:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.htmlspa

 

 

 ngx_http_limit_req_module:限制某一時間內,單一IP的請求數.示例:code

複製代碼

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    ...
  #定義一個名爲one的limit_req_zone用來存儲session,大小是10M內存,  

  #以$binary_remote_addr 爲key,限制平均每秒的請求爲1個,
  #1M能存儲16000個狀態,rete的值必須爲整數,
  

    server {

        ...

        location /search/ {
            limit_req zone=one burst=5;
        
        #限制每ip每秒不超過1個請求,漏桶數burst爲5,也就是隊列.
        #nodelay,若是不設置該選項,嚴格使用平均速率限制請求數,超過的請求被延時處理.
        #舉個栗子:
        #設置
        


        }rate=20r/s每秒請求數爲20個,漏桶數burst爲5個,
        #brust的意思就是,若是第1秒、2,3,4秒請求爲19個,第5秒的請求爲25個是被容許的,能夠理解爲20+5
        #可是若是你第1秒就25個請求,第2秒超過20的請求返回503錯誤.
        #若是區域存儲空間不足,服務器將返回503(服務臨時不可用)錯誤 
        #速率在每秒請求中指定(r/s)。若是須要每秒少於一個請求的速率,則以每分鐘的請求(r/m)指定。 

複製代碼

 

還能夠限制來自單個IP地址的請求的處理速率,同時限制虛擬服務器的請求處理速率:server

 

複製代碼

http {
    limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
    limit_req_zone $server_name zone=perserver:10m rate=10r/s;

    ...

    server {

        ...

            limit_req zone=perip burst=5 nodelay;  #漏桶數爲5個.也就是隊列數.nodelay:不啓用延遲.
            limit_req zone=perserver burst=10;    #限制nginx的處理速率爲每秒10個
        }

複製代碼

 

參考文檔:http://nginx.org/en/docs/http/ngx_http_limit_req_module.htmlhtm

相關文章
相關標籤/搜索