首頁  >  文章  >  運維  >  怎麼用Nginx限制存取頻率、下載速率和並發連線數

怎麼用Nginx限制存取頻率、下載速率和並發連線數

王林
王林轉載
2023-05-15 21:22:221648瀏覽

一、限制存取頻率、並發連線、下載速度用到的模組和指令概述

  • ngx_http_limit_req_module :用來限制單位時間內的請求數,即速率限制,採用的漏桶演算法「leaky bucket」

  • ngx_http_limit_conn_module :用來限制相同時間連接數,即並發限制

  • limit_rate和limit_rate_after :下載速度設定

漏桶演算法(leaky bucket)

怎麼用Nginx限制存取頻率、下載速率和並發連線數

演算法想法是:

  • 水(請求)從上方倒入水桶,從水桶下方流出(被處理)

  • #來不及流出的水存在水桶中(緩衝),以固定速率流出;

  • 水桶滿後水溢出(丟棄)。

  • 這個演算法的核心是:快取請求、勻速處理、多餘的請求直接丟棄。

  • nginx依請求速率限速模組使用的是漏桶演算法,即能夠強行保證請求的即時處理速度不會超過設定的閾值

二、限制url存取請求頻率

http{ 
    ... 
 
  limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s; 
  limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s; 
  limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=20r/s; 
  limit_req_status 444; 
    ... 
 
  server{ 
      ... 
 
    limit_req zone=two burst=15 nodelay; 
    ... 
 
  } 
}

解釋:

limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s;

  • $binary_remote_addr 是限制相同客戶端ip位址不同url

  • zone:區域名稱one 存放session30m

  • #rate : 每秒鐘請求數

limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s;

  • $binary_remote_addr $uri是限制相同客戶端ip位址相同url

  • zone:區域名稱two 存放session30m

  • rate: 每秒鐘請求數

limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=20r/s;

  • #url##$binary_remote_addr $request_uri 是限制相同客戶端位址相同限制

  • zone:區域名稱two 存放session30m

  • #rate: 每秒鐘請求數

limit_req zone=two burst=15 nodelay;

    ##zone引用區域為two,
  • burst 設定一個大小為15的緩衝區,當當有大量請求(爆發)過來時,訪問超過了上面的限制可以先放到緩衝區內。
  • nodelay 一般是和burst一起使用的,如果設定了nodelay,當訪問超過了頻次而且緩衝區也滿的情況下會直接返回503,如果設定了,則所有大的請求會等待排隊
三、並發連線數限制

案例一:

http { 
  ... 
 
  limit_conn_log_level error; 
  limit_conn_zone $binary_remote_addr zone=addr:10m; 
  limit_conn_status 503; 
 
  ... 
 
  server { 
 
    ... 
 
    location /download/ { 
      limit_conn addr 1; 单个客户端ip限制为1 
    } 
    ... 
 
}

案例二:

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; #限制与服务器的总连接数 
  } 
}

四、限制下載速度

location /download { 
  limit_rate 128k; 
 } 
 
#如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速可以增加以下配内容 
 
location /download { 
    limit_rate_after 10m; 
    limit_rate 128k; 
 }

以上是怎麼用Nginx限制存取頻率、下載速率和並發連線數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除