婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 一文搞懂Nginx限流(簡單實現(xiàn))

一文搞懂Nginx限流(簡單實現(xiàn))

熱門標(biāo)簽:東莞人工智能電銷機(jī)器人供應(yīng)商 賀州市地圖標(biāo)注app 廣州電銷機(jī)器人系統(tǒng)圖 智能電話機(jī)器人線路 百度地圖標(biāo)注要不要錢 江蘇電銷外呼防封系統(tǒng)是什么 金融行業(yè)外呼線路 高德地圖標(biāo)注無營業(yè)執(zhí)照 長沙開福怎么申請400電話

Nginx現(xiàn)在已經(jīng)是最火的負(fù)載均衡之一,在流量陡增的互聯(lián)網(wǎng)面前,接口限流也是很有必要的,尤其是針對高并發(fā)的場景。Nginx的限流主要是兩種方式:限制訪問頻率和限制并發(fā)連接數(shù)。

限流(rate limiting)是NGINX眾多特性中最有用的,也是經(jīng)常容易被誤解和錯誤配置的,特性之一。該特性可以限制某個用戶在一個給定時間段內(nèi)能夠產(chǎn)生的HTTP請求數(shù)。請求可以簡單到就是一個對于主頁的GET請求或者一個登陸表格的POST請求。
限流也可以用于安全目的上,比如減慢暴力密碼破解攻擊。通過限制進(jìn)來的請求速率,并且(結(jié)合日志)標(biāo)記出目標(biāo)URLs來幫助防范DDoS攻擊。一般地說,限流是用在保護(hù)上游應(yīng)用服務(wù)器不被在同一時刻的大量用戶請求湮沒。

NGINX限流是如何工作的

NGINX限流使用漏桶算法(leaky bucket algorithm),該算法廣泛應(yīng)用于通信和基于包交換計算機(jī)網(wǎng)絡(luò)中,用來處理當(dāng)帶寬被限制時的突發(fā)情況。和一個從上面進(jìn)水,從下面漏水的桶的原理很相似;如果進(jìn)水的速率大于漏水的速率,這個桶就會發(fā)生溢出。

在請求處理過程中,水代表從客戶端來的請求,而桶代表了一個隊列,請求在該隊列中依據(jù)先進(jìn)先出(FIFO)算法等待被處理。漏的水代表請求離開緩沖區(qū)并被服務(wù)器處理,溢出代表了請求被丟棄并且永不被服務(wù)。

一、限制訪問頻率(正常流量)

Nginx中我們使用ngx_http_limit_req_module模塊來限制請求的訪問頻率,基于漏桶算法原理實現(xiàn)。接下來我們使用 nginx limit_req_zone 和 limit_req 兩個指令,限制單個IP的請求處理速率。

語法:limit_req_zone key zone rate

  • key :定義限流對象,binary_remote_addr 是一種key,表示基于 remote_addr(客戶端IP) 來做限流,binary_ 的目的是壓縮內(nèi)存占用量。
  • zone:定義共享內(nèi)存區(qū)來存儲訪問信息, myRateLimit:10m 表示一個大小為10M,名字為myRateLimit的內(nèi)存區(qū)域。1M能存儲16000 IP地址的訪問信息,10M可以存儲16W IP地址訪問信息。
  • rate 用于設(shè)置最大訪問速率,rate=10r/s 表示每秒最多處理10個請求。Nginx 實際上以毫秒為粒度來跟蹤請求信息,因此 10r/s 實際上是限制:每100毫秒處理一個請求。這意味著,自上一個請求處理完后,若后續(xù)100毫秒內(nèi)又有請求到達(dá),將拒絕處理該請求。

二、限制訪問頻率(突發(fā)流量)

按上面的配置在流量突然增大時,超出的請求將被拒絕,無法處理突發(fā)流量,那么在處理突發(fā)流量的時候,該怎么處理呢?Nginx提供了 burst 參數(shù)來解決突發(fā)流量的問題,并結(jié)合 nodelay 參數(shù)一起使用。burst 譯為突發(fā)、爆發(fā),表示在超過設(shè)定的處理速率后能額外處理的請求數(shù)。

burst=20 nodelay表示這20個請求立馬處理,不能延遲,相當(dāng)于特事特辦。不過,即使這20個突發(fā)請求立馬處理結(jié)束,后續(xù)來了請求也不會立馬處理。burst=20 相當(dāng)于緩存隊列中占了20個坑,即使請求被處理了,這20個位置這只能按 100ms一個來釋放。這就達(dá)到了速率穩(wěn)定,但突然流量也能正常處理的效果。

三、限制并發(fā)連接數(shù)

Nginx 的ngx_http_limit_conn_module模塊提供了對資源連接數(shù)進(jìn)行限制的功能,使用 limit_conn_zone 和 limit_conn 兩個指令就可以了。

limit_conn perip 20:對應(yīng)的key是 $binary_remote_addr,表示限制單個IP同時最多能持有20個連接。 limit_conn perserver 100:對應(yīng)的key是 $server_name,表示虛擬主機(jī)(server) 同時能處理并發(fā)連接的總數(shù)。注意,只有當(dāng) request header 被后端server處理后,這個連接才進(jìn)行計數(shù)。

好了,以上幾種限流方式,你都清楚了嗎?

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:松原 張家界 洛陽 滄州 玉樹 永州 北京 廊坊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一文搞懂Nginx限流(簡單實現(xiàn))》,本文關(guān)鍵詞  一文,搞懂,Nginx,限流,簡單,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《一文搞懂Nginx限流(簡單實現(xiàn))》相關(guān)的同類信息!
  • 本頁收集關(guān)于一文搞懂Nginx限流(簡單實現(xiàn))的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 阿克陶县| 砚山县| 临江市| 安丘市| 四会市| 江川县| 塘沽区| 东莞市| 榆社县| 博乐市| 本溪市| 岗巴县| 隆昌县| 米泉市| 卢龙县| 兴宁市| 马尔康县| 佛学| 台州市| 华坪县| 宜宾市| 韶山市| 西林县| 古丈县| 环江| 越西县| 吉安县| 扶沟县| 玉林市| 江达县| 峡江县| 武清区| 玉林市| 基隆市| 云龙县| 中宁县| 周宁县| 呼和浩特市| 洛宁县| 阳新县| 尼勒克县|