Nginx之帶寬限制的實(shí)現(xiàn)示例
基本介紹
在高負(fù)載的網(wǎng)絡(luò)環(huán)境下,為了保持服務(wù)的穩(wěn)定性,限速 (download rate) 是一種必要的操控拜訪量的手法。Nginx 是一款高性能的 Web 服務(wù)器和反向代理服務(wù)器,可以運(yùn)用 limit_rate_after 和 limit_rate 兩個(gè)首要指令來完結(jié)流量操控和限速。
作為NGINX流量管理的三大功能之一,帶寬控制的實(shí)現(xiàn)相對簡單。它也只是實(shí)現(xiàn)了單個(gè)連接上的帶寬控制,經(jīng)常要和速率控制、并發(fā)控制一起使用來實(shí)現(xiàn)客戶端的流量管理。
從NGINX架構(gòu)上來看,單個(gè)的連接整個(gè)生命周期的處理是在某一個(gè)單獨(dú)的worker進(jìn)程中進(jìn)行的。所以,帶寬控制不需要在各個(gè)worker進(jìn)程之間共享和同步數(shù)據(jù)。從而不需要像速率控制、并發(fā)控制那樣定義一個(gè)共享內(nèi)存的zone來共享和同步的數(shù)據(jù)。基于此,帶寬控制的指令就沒有了速率控制和并發(fā)控制所需要定義共享內(nèi)存區(qū)域的指令。
指令配置
limit_rate
limit_rate 指令是用來操控發(fā)送至客戶端的數(shù)據(jù)傳輸速度的,它可以約束整個(gè)銜接的流量,也可以約束單個(gè)客戶端拜訪速度。
Syntax:limit_rate rate; Default:limit_rate 0; Context:http, server, location, if in location
限制發(fā)向客戶端響應(yīng)的數(shù)據(jù)的速率。單位是BYTES每秒。默認(rèn)值0表示不進(jìn)行速率限制。此限制是針對每一個(gè)連接請求而言的,所以,如果客戶端同時(shí)有并行的n個(gè)連接,那么這個(gè)客戶端的整體速率就是n倍的limit_rate。
limit_rate 1k;
limit_rate_after
在傳輸完一定數(shù)量的BYTES之后設(shè)開始實(shí)施帶寬控制。與指令limit_rate一樣,后面的參數(shù)數(shù)值可以通過變量來設(shè)置。
Syntax:limit_rate_after size; Default:limit_rate_after 0; Context:http, server, location, if in location
指令limit_rate_after只有在配置了limit_rate的前提下才能生效。如果只配置limit_rate_after則不會(huì)有帶寬控制的效果。
location /test/ {
limit_rate_after 500k;
limit_rate 50k;
}如果同時(shí)配置了sendfile_max_chunk 指令,按照兩者較小的數(shù)值進(jìn)行帶寬控制。
實(shí)戰(zhàn)測試
location / {
limit_rate 1k;
root html;
}
在瀏覽器輸入 http://xxxx/portal.tar 下載 portal.tar 文件 可以看到下載速度在 1k 以內(nèi)

location / {
limit_rate_after 50m;
limit_rate 1k;
root html;
} 在瀏覽器輸入 http://xxxx/portal.tar 下載 portal.tar 文件

在下載50m后,速度約束在1k以內(nèi)

原理: 令牌桶算法
NGINX采用了令牌桶算法進(jìn)行帶寬控制。使用一張經(jīng)典的圖偏來描述令牌桶算法:

具體流程是:
- 系統(tǒng)以固定速率產(chǎn)生令牌,并且緩存到令牌桶里。
- 當(dāng)令牌桶滿時(shí),再來的令牌會(huì)被丟棄。
- 傳輸報(bào)文時(shí),根據(jù)報(bào)文的大小消費(fèi)對應(yīng)數(shù)量的令牌。
- 當(dāng)令牌不足時(shí),不能夠傳輸報(bào)文。
令牌桶算法用一只“桶”用來存儲(chǔ)令牌,還用一個(gè)隊(duì)列存儲(chǔ)請求。從作用上來說,漏桶和令牌桶算法最明顯的區(qū)別就是是否允許突發(fā)流量(burst)的處理,漏桶算法能夠強(qiáng)行限制數(shù)據(jù)的實(shí)時(shí)傳輸(處理)速率,對突發(fā)流量不做額外處理,它對流量進(jìn)行的是管制(policy);而令牌桶算法能夠在限制數(shù)據(jù)的平均傳輸速率的同時(shí)允許某種程度的突發(fā)傳輸,它對流量進(jìn)行的是整形(shapping)。
到此這篇關(guān)于Nginx之帶寬限制的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Nginx 帶寬限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
LNMPA遇到504 Gateway time-out錯(cuò)誤的解決方法
這篇文章主要介紹了LNMPA遇到504 Gateway time-out錯(cuò)誤的解決方法,需要的朋友可以參考下2017-07-07
Nginx做NodeJS應(yīng)用負(fù)載均衡配置實(shí)例
這篇文章主要介紹了Nginx做NodeJS應(yīng)用負(fù)載均衡配置實(shí)例,本文直接給出配置實(shí)例,需要的朋友可以參考下2015-01-01
Nginx反向代理出現(xiàn)502?Bad?Gateway問題解決
在配置Nginx反向代理時(shí)遇到502 Bad Gateway錯(cuò)誤,經(jīng)過排查發(fā)現(xiàn)是SSL握手問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
關(guān)閉nginx空主機(jī)頭 防止nginx空主機(jī)頭及惡意域名指向
nginx的默認(rèn)配置中的虛擬主機(jī)允許用戶通過IP訪問,或者通過未設(shè)置的域名訪問,比如有人惡意把他自己的域名指向了你的ip,需要的朋友可以參考下2016-09-09
nginx設(shè)置超時(shí)時(shí)間的問題及解決方案
程序在處理大量數(shù)據(jù),接口超過1分鐘(默認(rèn)的)未返回?cái)?shù)據(jù),導(dǎo)致等待超時(shí),出現(xiàn)這種情況,我們可以先優(yōu)化程序,縮短執(zhí)行時(shí)間,可以調(diào)大nginx超時(shí)限制的參數(shù),使程序可以正常執(zhí)行,本文介紹nginx設(shè)置超時(shí)時(shí)間及504 Gateway Time-out的問題解決方案,一起看看吧2024-02-02

