天天看點

nginx限制ip通路_nginx 如何限制通路頻率,下載下傳速率和并發連接配接數.md一、 限制通路頻率、并發連接配接、下載下傳速度用到的子產品和指令概述二、限制URL通路請求頻率三、并發連接配接數限制四、限制下載下傳速度

一、 限制通路頻率、并發連接配接、下載下傳速度用到的子產品和指令概述

ngx_http_limit_req_module 用來限制機關時間内的請求數,即速率限制,采用的漏桶算法 “leaky bucket”

ngx_http_limit_conn_module 用來限制同一時間連接配接數,即并發限制

limit_rate和limit_rate_after 下載下傳速度設定

漏桶算法(leaky bucket)

nginx限制ip通路_nginx 如何限制通路頻率,下載下傳速率和并發連接配接數.md一、 限制通路頻率、并發連接配接、下載下傳速度用到的子產品和指令概述二、限制URL通路請求頻率三、并發連接配接數限制四、限制下載下傳速度

算法思想是:

  • 水(請求)從上方倒入水桶,從水桶下方流出(被處理)
  • 來不及流出的水存在水桶中(緩沖),以固定速率流出;
  • 水桶滿後水溢出(丢棄)。
  • 這個算法的核心是:緩存請求、勻速處理、多餘的請求直接丢棄。
  • 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位址 不同URLzone:區域名one 存放session30Mrate: 每秒鐘請求數
           

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

$binary_remote_addr $uri 是限制同一用戶端ip位址 相同URLzone:區域名two 存放session30Mrate: 每秒鐘請求數
           

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

$binary_remote_addr $request_uri 是限制同一用戶端ip位址 相同URLzone:區域名two 存放session30Mrate: 每秒鐘請求數
           

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限制ip通路_nginx 如何限制通路頻率,下載下傳速率和并發連接配接數.md一、 限制通路頻率、并發連接配接、下載下傳速度用到的子產品和指令概述二、限制URL通路請求頻率三、并發連接配接數限制四、限制下載下傳速度