Nginx之帶寬限制的實現(xiàn)示例
基本介紹
在高負載的網(wǎng)絡環(huán)境下,為了保持服務的穩(wěn)定性,限速 (download rate) 是一種必要的操控拜訪量的手法。Nginx 是一款高性能的 Web 服務器和反向代理服務器,可以運用 limit_rate_after 和 limit_rate 兩個首要指令來完結(jié)流量操控和限速。
作為NGINX流量管理的三大功能之一,帶寬控制的實現(xiàn)相對簡單。它也只是實現(xiàn)了單個連接上的帶寬控制,經(jīng)常要和速率控制、并發(fā)控制一起使用來實現(xiàn)客戶端的流量管理。
從NGINX架構(gòu)上來看,單個的連接整個生命周期的處理是在某一個單獨的worker進程中進行的。所以,帶寬控制不需要在各個worker進程之間共享和同步數(shù)據(jù)。從而不需要像速率控制、并發(fā)控制那樣定義一個共享內(nèi)存的zone來共享和同步的數(shù)據(jù)?;诖?,帶寬控制的指令就沒有了速率控制和并發(fā)控制所需要定義共享內(nèi)存區(qū)域的指令。
指令配置
limit_rate
limit_rate 指令是用來操控發(fā)送至客戶端的數(shù)據(jù)傳輸速度的,它可以約束整個銜接的流量,也可以約束單個客戶端拜訪速度。
Syntax:limit_rate rate; Default:limit_rate 0; Context:http, server, location, if in location
限制發(fā)向客戶端響應的數(shù)據(jù)的速率。單位是BYTES每秒。默認值0表示不進行速率限制。此限制是針對每一個連接請求而言的,所以,如果客戶端同時有并行的n個連接,那么這個客戶端的整體速率就是n倍的limit_rate。
limit_rate 1k;
limit_rate_after
在傳輸完一定數(shù)量的BYTES之后設開始實施帶寬控制。與指令limit_rate一樣,后面的參數(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則不會有帶寬控制的效果。
location /test/ { limit_rate_after 500k; limit_rate 50k; }
如果同時配置了sendfile_max_chunk 指令,按照兩者較小的數(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īng)典的圖偏來描述令牌桶算法:
具體流程是:
- 系統(tǒng)以固定速率產(chǎn)生令牌,并且緩存到令牌桶里。
- 當令牌桶滿時,再來的令牌會被丟棄。
- 傳輸報文時,根據(jù)報文的大小消費對應數(shù)量的令牌。
- 當令牌不足時,不能夠傳輸報文。
令牌桶算法用一只“桶”用來存儲令牌,還用一個隊列存儲請求。從作用上來說,漏桶和令牌桶算法最明顯的區(qū)別就是是否允許突發(fā)流量(burst)的處理,漏桶算法能夠強行限制數(shù)據(jù)的實時傳輸(處理)速率,對突發(fā)流量不做額外處理,它對流量進行的是管制(policy);而令牌桶算法能夠在限制數(shù)據(jù)的平均傳輸速率的同時允許某種程度的突發(fā)傳輸,它對流量進行的是整形(shapping)。
到此這篇關(guān)于Nginx之帶寬限制的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Nginx 帶寬限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
LNMPA遇到504 Gateway time-out錯誤的解決方法
這篇文章主要介紹了LNMPA遇到504 Gateway time-out錯誤的解決方法,需要的朋友可以參考下2017-07-07Nginx反向代理出現(xiàn)502?Bad?Gateway問題解決
在配置Nginx反向代理時遇到502 Bad Gateway錯誤,經(jīng)過排查發(fā)現(xiàn)是SSL握手問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-10-10關(guān)閉nginx空主機頭 防止nginx空主機頭及惡意域名指向
nginx的默認配置中的虛擬主機允許用戶通過IP訪問,或者通過未設置的域名訪問,比如有人惡意把他自己的域名指向了你的ip,需要的朋友可以參考下2016-09-09