在上一篇文章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/
關于作者:專注于基礎平臺的專案開發,如有問題或建議,請多多賜教!
著作權宣告:本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文鏈接,
特此宣告:所有評論和私信都會在第一時間回復,也歡迎園子的大大們指正錯誤,共同進步,或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下,您的鼓勵是作者堅持原創和持續寫作的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/237451.html
標籤:其他
