本文小編為大家詳細介紹“Nginx限流如何實現(xiàn)”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“Nginx限流如何實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
創(chuàng)新互聯(lián)公司擁有10余年成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供網(wǎng)站設(shè)計、成都網(wǎng)站制作服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、重慶APP軟件開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
nginx限流是如何工作的
nginx限流使用漏桶算法(leaky bucket algorithm),該算法廣泛應(yīng)用于通信和基于包交換計算機網(wǎng)絡(luò)中,用來處理當(dāng)帶寬被限制時的突發(fā)情況。和一個從上面進水,從下面漏水的桶的原理很相似;如果進水的速率大于漏水的速率,這個桶就會發(fā)生溢出。
在請求處理過程中,水代表從客戶端來的請求,而桶代表了一個隊列,請求在該隊列中依據(jù)先進先出(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)又有請求到達,將拒絕處理該請求。
二、限制訪問頻率(突發(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一個來釋放。這就達到了速率穩(wěn)定,但突然流量也能正常處理的效果。
三、限制并發(fā)連接數(shù)
nginx 的ngx_http_limit_conn_module模塊提供了對資源連接數(shù)進行限制的功能,使用 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,表示虛擬主機(server) 同時能處理并發(fā)連接的總數(shù)。注意,只有當(dāng) request header 被后端server處理后,這個連接才進行計數(shù)。
讀到這里,這篇“Nginx限流如何實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
名稱欄目:Nginx限流如何實現(xiàn)
URL鏈接:http://aaarwkj.com/article30/gipppo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、搜索引擎優(yōu)化、移動網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、全網(wǎng)營銷推廣、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)