Nginx限流設定

2021-09-22 12:53:01 字數 1739 閱讀 6960

hello world成功的必經之路!

1.限流演算法

(1)令牌限流

演算法思想是:

令牌以固定速率產生,並快取到令牌桶中;

令牌桶放滿時,多餘的令牌被丟棄;

請求要消耗等比例的令牌才能被處理;

令牌不夠時,請求被快取。

(2)漏桶演算法

演算法思想是:

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

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

水桶滿後水溢位(丟棄)。

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

相比漏桶演算法,令牌桶演算法不同之處在於它不但有乙隻「桶」,還有個佇列,這個桶是用來存放令牌的,佇列才是用來存放請求的。

從作用上來說,漏桶和令牌桶演算法最明顯的區別就是是否允許突發流量(burst)的處理,漏桶演算法能夠強行限制資料的實時傳輸(處理)速率,對突發流量不做額外處理;而令牌桶演算法能夠在限制資料的平均傳輸速率的同時允許某種程度的突發傳輸。

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

nginx官方版本限制ip的連線和併發分別有兩個模組:

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

limit_req_conn用來限制同一時間連線數,即併發限制。

2. **

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/m;

server

}

上述**親測有效,現在解釋一下下面的**

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

第乙個引數:$binary_remote_addr 表示通過remote_addr這個標識來做限制,是限制同一客戶端ip位址。

第二個引數:zone=one:10m表示生成乙個大小為10m,名字為one的記憶體區域,用來儲存訪問的頻次資訊。

第三個引數:rate=1r/s表示允許相同標識的客戶端的訪問頻次,這裡限制的是每秒1次,還可以有比如30r/m的。

limit_req zone=one burst=5 nodelay;

第乙個引數:zone=one 設定使用哪個配置區域來做限制,與上面limit_req_zone 裡的name對應。

第二個引數:burst=5,重點說明一下這個配置,burst爆發的意思,這個配置的意思是設定乙個大小為5的緩衝區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩衝區內。

第三個引數:nodelay,如果設定,超過訪問頻次而且緩衝區也滿了的時候就會直接返回503,如果沒有設定,則所有請求會等待排隊。

以上內容來自:

死磕nginx系列–nginx 限流配置,好文章肯定要和大家分享,這是我看了好久,覺得寫得最好的一篇文章,很詳細。

Nginx限流設定

nginx 提供兩種不同的限流方式,分別為ngx http limit req module,ngx http limit conn module,兩個模組可以搭配使用,其中ngx http limit req module用來限制請求次數,ngx http limit conn module限制併...

nginx 限流學習

在當今流量徒增的網際網路時代,很多業務場景都會涉及到高併發。這個時候介面進行限流是非常有必要的,而限流是nginx最有用的特性之一。一般情況下,首頁的併發量很大,即使應用了多級快取,使用者不停的重新整理 也是沒有必要的,甚至有些惡意的請求也會對系統造成影響。其作用可以防止使用者惡意刷爆 控制併發量。...

nginx限流策略

參考 limit req zone binary remote addr zone mylimit 10m rate 2r s server binary remote addr 表示針對每個ip限流 zone mylimit 10m 表示建立乙個大小為 10m 的名為 mylimit 的記憶體區域...