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è)首要指令來(lái)完結(jié)流量操控和限速。
作為NGINX流量管理的三大功能之一,帶寬控制的實(shí)現(xiàn)相對(duì)簡(jiǎn)單。它也只是實(shí)現(xiàn)了單個(gè)連接上的帶寬控制,經(jīng)常要和速率控制、并發(fā)控制一起使用來(lái)實(shí)現(xiàn)客戶端的流量管理。
從NGINX架構(gòu)上來(lái)看,單個(gè)的連接整個(gè)生命周期的處理是在某一個(gè)單獨(dú)的worker進(jìn)程中進(jìn)行的。所以,帶寬控制不需要在各個(gè)worker進(jìn)程之間共享和同步數(shù)據(jù)。從而不需要像速率控制、并發(fā)控制那樣定義一個(gè)共享內(nèi)存的zone來(lái)共享和同步的數(shù)據(jù)?;诖?,帶寬控制的指令就沒(méi)有了速率控制和并發(fā)控制所需要定義共享內(nèi)存區(qū)域的指令。
指令配置
limit_rate
limit_rate 指令是用來(lái)操控發(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)行速率限制。此限制是針對(duì)每一個(gè)連接請(qǐng)求而言的,所以,如果客戶端同時(shí)有并行的n個(gè)連接,那么這個(gè)客戶端的整體速率就是n倍的limit_rate。
limit_rate 1k;
limit_rate_after
在傳輸完一定數(shù)量的BYTES之后設(shè)開始實(shí)施帶寬控制。與指令limit_rate一樣,后面的參數(shù)數(shù)值可以通過(guò)變量來(lái)設(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)測(cè)試
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)典的圖偏來(lái)描述令牌桶算法:
具體流程是:
- 系統(tǒng)以固定速率產(chǎn)生令牌,并且緩存到令牌桶里。
- 當(dāng)令牌桶滿時(shí),再來(lái)的令牌會(huì)被丟棄。
- 傳輸報(bào)文時(shí),根據(jù)報(bào)文的大小消費(fèi)對(duì)應(yīng)數(shù)量的令牌。
- 當(dāng)令牌不足時(shí),不能夠傳輸報(bào)文。
令牌桶算法用一只“桶”用來(lái)存儲(chǔ)令牌,還用一個(gè)隊(duì)列存儲(chǔ)請(qǐng)求。從作用上來(lái)說(shuō),漏桶和令牌桶算法最明顯的區(qū)別就是是否允許突發(fā)流量(burst)的處理,漏桶算法能夠強(qiáng)行限制數(shù)據(jù)的實(shí)時(shí)傳輸(處理)速率,對(duì)突發(fā)流量不做額外處理,它對(duì)流量進(jìn)行的是管制(policy);而令牌桶算法能夠在限制數(shù)據(jù)的平均傳輸速率的同時(shí)允許某種程度的突發(fā)傳輸,它對(duì)流量進(jìn)行的是整形(shapping)。
到此這篇關(guān)于Nginx之帶寬限制的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Nginx 帶寬限制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx代理axios請(qǐng)求以及注意事項(xiàng)詳解
這篇文章主要給大家介紹了關(guān)于Nginx代理axios請(qǐng)求以及注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08LNMPA遇到504 Gateway time-out錯(cuò)誤的解決方法
這篇文章主要介紹了LNMPA遇到504 Gateway time-out錯(cuò)誤的解決方法,需要的朋友可以參考下2017-07-07Nginx做NodeJS應(yīng)用負(fù)載均衡配置實(shí)例
這篇文章主要介紹了Nginx做NodeJS應(yīng)用負(fù)載均衡配置實(shí)例,本文直接給出配置實(shí)例,需要的朋友可以參考下2015-01-01Nginx反向代理出現(xiàn)502?Bad?Gateway問(wèn)題解決
在配置Nginx反向代理時(shí)遇到502 Bad Gateway錯(cuò)誤,經(jīng)過(guò)排查發(fā)現(xiàn)是SSL握手問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10關(guān)閉nginx空主機(jī)頭 防止nginx空主機(jī)頭及惡意域名指向
nginx的默認(rèn)配置中的虛擬主機(jī)允許用戶通過(guò)IP訪問(wèn),或者通過(guò)未設(shè)置的域名訪問(wèn),比如有人惡意把他自己的域名指向了你的ip,需要的朋友可以參考下2016-09-09centos8中使用yum安裝nginx的詳細(xì)過(guò)程
這篇文章主要介紹了centos8中怎樣使用yum安裝?nginx,centos8和centos7安裝nginx有點(diǎn)點(diǎn)不一樣,centos8?自帶了nginx?1.14.1?,我們先升級(jí)到新穩(wěn)定版1.20.1,具體安裝方法跟隨小編一起學(xué)習(xí)下吧2023-03-03nginx設(shè)置超時(shí)時(shí)間的問(wèn)題及解決方案
程序在處理大量數(shù)據(jù),接口超過(guò)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的問(wèn)題解決方案,一起看看吧2024-02-02