欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nginx http響應(yīng)限速的具體實(shí)現(xiàn)

 更新時(shí)間:2024年05月31日 09:28:08   作者:碼農(nóng)心語(yǔ)  
本文主要介紹了nginx http響應(yīng)限速的具體實(shí)現(xiàn),可以使用limite_rate和limit_rate_after來限制HTTP響應(yīng)的速度,具有一定的參考價(jià)值,感興趣的可以了解一下

1. 引言

在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中,服務(wù)器的性能和響應(yīng)速度是至關(guān)重要的。為了保證服務(wù)器的穩(wěn)定性和可靠性,限制客戶端對(duì)服務(wù)器的訪問速度是一項(xiàng)重要的任務(wù)。而nginx 是一款高性能的 Web 服務(wù)器和反向代理服務(wù)器,提供了豐富的功能來管理和控制客戶端請(qǐng)求。其中,HTTP 響應(yīng)限速功能就是是一種有效的方式,可以限制服務(wù)器端對(duì)客戶端的響應(yīng)速度,以避免服務(wù)器在運(yùn)行過程中因?yàn)椴糠挚蛻舳苏加眠^多的資源而導(dǎo)致網(wǎng)絡(luò)和服務(wù)器負(fù)載過高,而引起服務(wù)的不穩(wěn)定的問題。

本文首先介紹了如何進(jìn)行nginx配置來啟用限速功能,然后通過深入源碼來詳細(xì)分析nginx http響應(yīng)限速的實(shí)現(xiàn)原理,讓大家對(duì)nginx的限速的實(shí)現(xiàn)原理有一個(gè)完整的認(rèn)識(shí)。

2. 配置參數(shù)

和響應(yīng)限速有關(guān)的主要配置參數(shù)一共有兩個(gè),分別是limite_rate和limit_rate_after。

2.1 limit_rate 配置指令

語(yǔ)  法: limit_rate rate;
默認(rèn)值: limit_rate 0;
上下文: http, server, location, if in location

本條配置指令用來限制響應(yīng)傳輸速率,單位為每秒字節(jié)數(shù),如果設(shè)置為0表示禁用限速功能。這個(gè)限制是對(duì)每個(gè)請(qǐng)求來說的(而不是對(duì)每個(gè)客戶端來限制的),也就是說如果同一個(gè)客戶端同時(shí)開啟了兩個(gè)鏈接,那么總的最大響應(yīng)速率降是這個(gè)限制速率的兩倍。

配置的參數(shù)值可以支持變量(從1.17.0版本開始)。這可能在限制的速率值依賴于某個(gè)條件的常見下面顯得非常有用,譬如:

map $slow $rate {
    1     4k;
    2     8k;
}

limit_rate $rate;

上例利用map模塊,將$slow變量的值映射為$rate變量的值,譬如$slow變量為1,那么映射出$rate為4k。這樣子,limit_rate就可以根據(jù)$slow的值來設(shè)置最終要限制的響應(yīng)速率了。

這樣子,結(jié)合map模塊的功能,我們完全可以讓限速功能變得得更加靈活,譬如根據(jù)http header的某個(gè)值來映射速率,根據(jù)請(qǐng)求的url或者域名來限制速率等等,這里就不在贅述了。

2.2 limit_rate_after 配置指令

語(yǔ)  法: limit_rate_after size;
默認(rèn)值:limit_rate_after 0;
上下文: http, server, location, if in location

備  注:

本條配置指令從0.8.0版本開始生效。

本條配置指令用來設(shè)置在給客戶端發(fā)送的響應(yīng)的字節(jié)數(shù)超過指定的值以后才開始限速。和limit_rate配置指令一樣,從1.17.0版本開始,可以支持變量方式配置。

這樣指令在流媒體播放的場(chǎng)景下面比較有用,為了支持播放器能夠盡量縮短播放前的加載時(shí)間,我們就需要在剛開始的時(shí)候盡可能快速地將視頻文件的頭部發(fā)送給客戶端;而等到播放器滿足播放條件開始播放的時(shí)候,我們又不太希望播放器加載得太快從而浪費(fèi)服務(wù)器的資源和網(wǎng)絡(luò)資源,所以需要限制客戶端的下載速度到某一個(gè)合理的值,只要保證播放器能夠流暢播放即可。

而limit_rate_after的配置指令正好滿足的這個(gè)場(chǎng)景的需求。

2.3 其他限速配置

nginx還可以支持通過設(shè)置$limit_rate變量參數(shù)來對(duì)響應(yīng)速度進(jìn)行限制,這樣就可以在nginx的運(yùn)行過程中,由腳本或者插件動(dòng)態(tài)設(shè)置響應(yīng)速率,這樣子限速邏輯更加靈活了。不過,從1.17.0版本開始,nginx官方不推薦使用這個(gè)方法。

nginx還支持上游服務(wù)器通過X-Accel-Limit-Rateheader頭來告訴nginx對(duì)本次響應(yīng)進(jìn)行限速多少的功能。這里不再贅述。

3. 源碼分析

nginx http的限速功能是通過ngx_http_write_filter函數(shù)來實(shí)現(xiàn)的。ngx_http_write_filter函數(shù)是 nginx 在處理 HTTP 請(qǐng)求時(shí)的一個(gè)重要函數(shù),它的主要作用是將響應(yīng)數(shù)據(jù)寫入到客戶端的網(wǎng)絡(luò)連接。具體來說,ngx_http_write_filter 函數(shù)執(zhí)行以下關(guān)鍵任務(wù):

  • 確定發(fā)送響應(yīng)數(shù)據(jù)的方式:根據(jù)客戶端連接的類型(例如普通連接、SSL 連接等),ngx_http_write_filter 函數(shù)確定使用哪種方式將響應(yīng)數(shù)據(jù)發(fā)送給客戶端。這包括直接發(fā)送數(shù)據(jù)、緩存數(shù)據(jù)再發(fā)送或者將數(shù)據(jù)寫入到發(fā)送緩沖區(qū)等。

  • 處理發(fā)送緩沖區(qū):ngx_http_write_filter 函數(shù)會(huì)將響應(yīng)數(shù)據(jù)寫入到發(fā)送緩沖區(qū)。發(fā)送緩沖區(qū)是一個(gè)用于臨時(shí)存儲(chǔ)將要發(fā)送給客戶端的數(shù)據(jù)的內(nèi)存區(qū)域。nginx 使用發(fā)送緩沖區(qū)來提高發(fā)送效率,避免每次發(fā)送數(shù)據(jù)都需要進(jìn)行系統(tǒng)調(diào)用。

  • 調(diào)用操作系統(tǒng)的網(wǎng)絡(luò)發(fā)送函數(shù):當(dāng)發(fā)送緩沖區(qū)中的數(shù)據(jù)達(dá)到一定大小或者達(dá)到一定的時(shí)間間隔時(shí),ngx_http_write_filter 函數(shù)會(huì)調(diào)用操作系統(tǒng)提供的網(wǎng)絡(luò)發(fā)送函數(shù),將數(shù)據(jù)從發(fā)送緩沖區(qū)發(fā)送到客戶端的網(wǎng)絡(luò)連接中。

  • 處理發(fā)送過程中的錯(cuò)誤:在發(fā)送響應(yīng)數(shù)據(jù)的過程中,可能會(huì)發(fā)生一些錯(cuò)誤,例如網(wǎng)絡(luò)連接中斷、客戶端關(guān)閉連接等。ngx_http_write_filter 函數(shù)會(huì)檢測(cè)并處理這些錯(cuò)誤情況,確保響應(yīng)數(shù)據(jù)能夠正確地發(fā)送給客戶端。

下圖給出了ngx_http_writer_filter實(shí)現(xiàn)的大致流程圖:

在這里插入圖片描述

限速原理的重點(diǎn)邏輯就是下面兩個(gè)公式:

limit = (off_t) r->limit_rate * (ngx_time() - r->start_sec + 1)
                - (c->sent - r->limit_rate_after);
                
delay = (ngx_msec_t) (- limit * 1000 / r->limit_rate + 1);

其中l(wèi)imit就是到目前為止按照設(shè)置的限速速率計(jì)算本次最多可以發(fā)送多少字節(jié)

如果limit<=0,表示本次已經(jīng)沒有發(fā)送的額度了,需要進(jìn)行延時(shí)發(fā)送。在這個(gè)時(shí)候就需要計(jì)算延時(shí)發(fā)送的延時(shí)時(shí)長(zhǎng),用到的就是delay變量了,該變量很好理解,就是到目前已經(jīng)超額發(fā)送的字節(jié)數(shù)/允許發(fā)送的速率,得到延時(shí)的毫秒數(shù),然后調(diào)用ngx_add_timer設(shè)置定時(shí)器進(jìn)行延時(shí)處理。

對(duì)照以上流程圖和相關(guān)解釋,ngx_http_write_filter的主要實(shí)現(xiàn)邏輯包括限速邏輯,我們有理由相信不難理解把握了,大家有興趣可以自行閱讀源碼。

到此這篇關(guān)于nginx http響應(yīng)限速的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)nginx http響應(yīng)限速內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx禁止國(guó)外IP訪問我的網(wǎng)站的實(shí)現(xiàn)

    Nginx禁止國(guó)外IP訪問我的網(wǎng)站的實(shí)現(xiàn)

    本文主要介紹了Nginx禁止國(guó)外IP訪問我的網(wǎng)站的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • nginx部署前端項(xiàng)目location時(shí)root和alias配置指南

    nginx部署前端項(xiàng)目location時(shí)root和alias配置指南

    nginx指定文件路徑有兩種方式root和alias,下面這篇文章主要給大家介紹了關(guān)于nginx部署前端項(xiàng)目location時(shí)root和alias配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Nginx實(shí)現(xiàn)404頁(yè)面的方法小結(jié)

    Nginx實(shí)現(xiàn)404頁(yè)面的方法小結(jié)

    這篇文章主要介紹了Nginx實(shí)現(xiàn)404頁(yè)面的方法小結(jié),需要的朋友可以參考下
    2017-08-08
  • Nginx的location的常見規(guī)則優(yōu)先級(jí)問題

    Nginx的location的常見規(guī)則優(yōu)先級(jí)問題

    Nginx是反向代理和負(fù)載均衡的首選工具,nginx的location配置有許多細(xì)節(jié)內(nèi)容在網(wǎng)上不容易找到資料,或者解釋不清。本文對(duì)Nginx location規(guī)則優(yōu)先級(jí)介紹,需要的朋友參考下吧
    2021-08-08
  • Linux下安裝配置nginx詳解

    Linux下安裝配置nginx詳解

    本篇文章主要介紹了Linux下安裝配置nginx,介紹了在Linux系統(tǒng)下安裝配置Nginx的詳細(xì)過程,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • Nginx的一些基本功能極速入門

    Nginx的一些基本功能極速入門

    本文主要介紹一些Nginx的最基本功能以及簡(jiǎn)單配置,但不包括Nginx的安裝部署以及實(shí)現(xiàn)原理。有興趣的可以了解一下。
    2016-12-12
  • Nginx可視化配置工具NginxWebUI的使用

    Nginx可視化配置工具NginxWebUI的使用

    本文主要介紹了Nginx可視化配置工具NginxWebUI的使用,可以使用?WebUI?配置?Nginx?的各項(xiàng)功能,包括端口轉(zhuǎn)發(fā),反向代理,ssl?證書配置,負(fù)載均衡等,感興趣的可以了解一下
    2022-01-01
  • nginx+redis實(shí)現(xiàn)session共享

    nginx+redis實(shí)現(xiàn)session共享

    這篇文章主要為大家詳細(xì)介紹了nginx+redis實(shí)現(xiàn)session的共享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • nginx中的limit_req限速設(shè)置配置示例

    nginx中的limit_req限速設(shè)置配置示例

    這篇文章主要介紹了nginx中的limit_req限速設(shè)置配置示例,本文直接給出配置文件例子,其中包含大量中文注釋,需要的朋友可以參考下
    2015-03-03
  • 深入淺析nginx四種調(diào)度算法和進(jìn)階

    深入淺析nginx四種調(diào)度算法和進(jìn)階

    這篇文章主要介紹了深入淺析nginx四種調(diào)度算法和進(jìn)階,文中給大家提到了upstream 支持4種負(fù)載均衡調(diào)度算法,需要的朋友可以參考下
    2018-06-06

最新評(píng)論