nginx限速配置的三種方法(limit_req、limit_conn、limit_rate)
目前來說在nginx上面我們常見的三種限速操作分別是
- 限制請求數(shù)(request) limit_req
- 限制連接數(shù)(connection) limit_conn
- 限制響應(yīng)速度(rate) limit_rate
1. limit_req
限制在一段時間內(nèi)的HTTP請求的數(shù)量,主要算法原理就是基于在計算機網(wǎng)絡(luò)中當(dāng)帶寬是有限時十分常用的漏桶算法。
基本原理就是:以漏桶為例,水從頂部倒入,從底下漏出。這里的幾個概念分別是:
- 漏桶對應(yīng)我們服務(wù)器的帶寬或者是處理請求的能力或者是一個隊列
- 水表示客戶端發(fā)送過來的請求
- 倒入的水則代表客戶端發(fā)送給服務(wù)器但尚未進行處理的請求,此時請求仍在隊列(在桶內(nèi))
- 漏出的水則代表從隊列中出來即將發(fā)送給服務(wù)器端處理的請求,此時請求已經(jīng)離開了隊列(在桶外)
漏桶在一定程度上可以代表服務(wù)器的處理能力,請求根據(jù)先進先出(FIFO)調(diào)度算法等待處理。如果倒入水的速度小于漏水的速度,可以理解為服務(wù)器能夠處理完所有的請求,此時整體服務(wù)表現(xiàn)正常。如果倒入水的速度大于漏水的速度,那么水桶內(nèi)的水會不斷增加直到最后溢出,這種情況下在水桶中的水可以理解為在隊列中等待的請求,而溢出的水則表示直接被丟棄不處理的請求。
限速配置:
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; location / { limit_req zone=mylimit burst=5 nodelay; limit_req _log_level error; limit_req_status 503; ······· }
step1 定義請求限制空間 limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
1. $binary_remote_addr,表明是以remote_addr為限制目標(biāo),加上binary是為了壓縮內(nèi)存占用空間
2. zone=name:size,分配一個以name為名的并且大小為size的內(nèi)存空間,用來存儲訪問的頻次信息
3. rate=nr/s, 如rate=1r/s表示同一個IP每秒只允許一個請求通過。
step2:定義請求限制 limit_req zone=mylimit burst=5 nodelay;
1.zone=mylimit,使用step1定義的空間
2.brust=x,表示設(shè)置一個大小為x的緩沖區(qū),超過頻次限制的請求先放入這個緩沖區(qū)。
3.nodelay,不延遲處理。
3.1 delay,前delay個不延遲處理,burst-delay的請求延遲處理,超過burst的503.
3.2 nodelay/delay都不填,就按照rate,一個個處理,超過brust直接返回503.
2.limit_conn
根據(jù)特定的key來限制連接的數(shù)量,需要注意的是并不是所有的連接都會被算入其中,只有當(dāng)一個連接的整個請求頭被讀取并且已經(jīng)被nginx服務(wù)器處理的時候才會算入限制中。
# 注意 應(yīng)該在http里面 server 外面 # $binanry_remote_addr 和$remote_addr 一樣 但是 減少空間 limit_conn_zone $binanry_remote_addr zone=conn_zone:1m server{ ... location / { # 同一時段 只有1個IP能訪問 limit_conn conn_zone 1; } }
3.limit_rate
限制用戶和服務(wù)器之間傳輸?shù)淖止?jié)數(shù),最常用的場景可能就是下載/上傳限速。
# 語法配置 Syntax: limit_rate_after size; Default: limit_rate_after 0; Context: http, server, location, if in location This directive appeared in version 0.8.0. ? # 示例 location /flv/ { flv; limit_rate_after 500k; limit_rate 50k; }
limit_rate
的用法非常簡單,后面跟隨的rate
就是具體限速的閾值,限速指令的生效范圍是根據(jù)每個連接確定的,例如上面限定每個連接的速率為50k,也就是當(dāng)客戶端發(fā)起兩個連接的時候,速率就可以變?yōu)?00k
limit_rate_after
允許在傳輸了一部分?jǐn)?shù)據(jù)之后再進行限速,例如上面的配置中就是傳輸?shù)那?00kbyte數(shù)據(jù)不限速,500k之后再進行限速。
limit_rate
的一大特點就是能夠使用變量,這就意味著和map指令之類的進行組合就可以實現(xiàn)動態(tài)限速功能
到此這篇關(guān)于nginx限速配置的三種方法(limit_req、limit_conn、limit_rate)的文章就介紹到這了,更多相關(guān)nginx限速配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS環(huán)境下Nginx配置SSL證書實現(xiàn)https請求詳解
這篇文章主要為大家介紹了Nginx實戰(zhàn)-配置SSL證書(CentOS環(huán)境),實現(xiàn)https請求過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05利用nginx實現(xiàn)動靜分離的負(fù)載均衡集群實戰(zhàn)教程
這篇文章介紹了利用nginx實現(xiàn)動靜分離的負(fù)載均衡集群實戰(zhàn),本次用到的操作系統(tǒng)及服務(wù),本次實驗一共需要3臺服務(wù)器,一臺nginx做為負(fù)載均衡分發(fā)器和動靜分離的分發(fā)器,兩臺apache做為后端服務(wù)器,使用nginx實現(xiàn)兩臺apache服務(wù)器的負(fù)載均衡和動靜分離,需要的朋友可以參考下2023-03-03Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法
這篇文章主要介紹了Nginx根據(jù)不同瀏覽器語言配置頁面跳轉(zhuǎn)的方法,包括一個簡體繁體的基本判斷方法及實際根據(jù)中英文跳轉(zhuǎn)的例子,需要的朋友可以參考下2016-04-04