[Web] Nginx limit_req 指南 – ngx_http_limit_req_module

Intro

Nginx限制訪問速率模組:Nginx http_limit_req


原理

使用leaky bucket原理(可以稱漏桶原理),桶的概念如下:

  • 桶中存放request (令牌的概念)
  • 桶上方由Nginx照設定速率計算補充request
  • 桶下方提供提取request,即一個Request會消耗掉桶中存放的一個request

Nginx對於桶的特性如下:

  • 單一IP對應使用一個桶
  • limit_req_zonerate是以request數量回推時間做補充的,依照兩次領取的時差補充相應的量
  • limit_reqburst即定義桶的request最大存放量,在每個新IP(不在Zone中)進入時會拿到全滿request(burst量)的桶
  • 重啟Nginx會清空Zone,意即所有桶的剩餘Quota記憶清除,重新以全滿計算

比照實際設定,limit_req_zone $binary_remote_addr zone=one:10m rate=6r/m;即每間隔10秒可以得到一個request補充量。以rate=100r/s速率來說明,即每0.01秒得一個request補充量,間距0.1秒計算得10個request補充量;
limit_req zone=one burst=5 nodelay;則表示每個IP桶最大預存的request量為5,有用掉則需等待補充。

Nginx實際上實作leaky bucket補充的方式可能為Trigger回填間隔補充量方式,本篇僅為概念說明,不代表實際Nginx演算法


Reference

Nginx下limit_req模块burst参数超详细解析

Leave a Reply

Your email address will not be published. Required fields are marked *