1. 程式人生 > >Nginx限流配置

Nginx限流配置

在上一篇文章Nginx負載均衡配置中,我們已經介紹了關於nginx的安裝與nginx負載均衡配置相關的知識,今天主要講講nginx是如何限流的。

隨著業務的擴散,系統併發越來越高時,有三樣利器用來保護系統,分別是快取、降級和限流。

快取:快取是現在系統中必不可少的模組,並且已經成為了高併發高效能架構的一個關鍵元件,快取的目的是提升系統訪問速度和增大系統處理容量。

降級:這個在天貓雙11的時候非常常見,降級是當服務出現問題或者影響到核心流程時,需要暫時遮蔽掉,待高峰或者問題解決後再開啟。

限流:限流的目的是通過對併發訪問/請求進行限速,或者對一個時間視窗內的請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務、排隊或等待、降級等處理

vlimit_req_zone

1.1 定義:用於限制單一的IP地址的請求的處理速率,即速率限制。

1.2 使用方法

在http中新增: limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

第一個引數:$binary_remote_addr 表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫記憶體佔用量,是限制同一客戶端ip地址。
第二個引數:zone=one:10m表示生成一個大小為10M,名字為one的記憶體區域,用來儲存訪問的頻次資訊。
第三個引數:rate=1r/s表示允許相同標識的客戶端的訪問頻次,這裡限制的是每秒1次,還可以有比如30r/m的。

在server中新增: limit_req zone=one burst=5 nodelay;

第一個引數:zone=one 設定使用哪個配置區域來做限制,與上面limit_req_zone 裡的name對應。
第二個引數:burst=5,重點說明一下這個配置,burst爆發的意思,這個配置的意思是設定一個大小為5的緩衝區當有大量請求(爆發)過來時,超過了訪問頻次限制的請求可以先放到這個緩衝區內。
第三個引數:nodelay,如果設定,超過訪問頻次而且緩衝區也滿了的時候就會直接返回503,如果沒有設定,則所有請求會等待排隊。

1.3 測試效果

我們先來個未配置nginx限流的ab壓測結果:

注意:若ab test不太熟悉的朋友可以看看這篇文章:ab test壓力測試

在來看看配置nginx限流之後ab測試的壓測結果:

vlimit_conn_zone

2.1 定義:限制連線數,特別是來自單個IP地址的連線數。

2.2 使用方法

在http中新增: limit_conn_zone $binary_remote_addr zone=addr:10m;

釋義:$binary_remote_addr :表示通過remote_addr這個標識來做限制,“binary_”的目的是縮寫記憶體佔用量,是限制同一客戶端ip地址。zone指定一個共享記憶體區域名稱,大小為10m。當超過此限制時,伺服器將返回錯誤

在server中新增: limit_conn addr 1;

釋義:每個ip只允許1個連線,使用的是addr共享區域

2.3 測試效果

v原始碼地址

https://github.com/toutouge/javademosecond/tree/master/hellospringboot


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平臺的專案開發。如有問題或建議,請多多賜教!
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!