- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會(huì )理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構許可:滇D3-20230001
- 代理域名注冊服務(wù)機構:新網(wǎng)數碼
nginx http響應限速的具體實(shí)現
藍隊云小課堂:
在現代互聯(lián)網(wǎng)應用中,服務(wù)器的性能和響應速度是至關(guān)重要的。為了保證服務(wù)器的穩定性和可靠性,限制客戶(hù)端對服務(wù)器的訪(fǎng)問(wèn)速度是一項重要的任務(wù)。而nginx 是一款高性能的 Web 服務(wù)器和反向代理服務(wù)器,提供了豐富的功能來(lái)管理和控制客戶(hù)端請求。其中,HTTP 響應限速功能就是是一種有效的方式,可以限制服務(wù)器端對客戶(hù)端的響應速度,以避免服務(wù)器在運行過(guò)程中因為部分客戶(hù)端占用過(guò)多的資源而導致網(wǎng)絡(luò )和服務(wù)器負載過(guò)高,而引起服務(wù)的不穩定的問(wèn)題。
本文首先介紹了如何進(jìn)行nginx配置來(lái)啟用限速功能,然后通過(guò)深入源碼來(lái)詳細分析nginx http響應限速的實(shí)現原理,讓大家對nginx的限速的實(shí)現原理有一個(gè)完整的認識。
2. 配置參數
和響應限速有關(guān)的主要配置參數一共有兩個(gè),分別是limite_rate和limit_rate_after。
2.1 limit_rate 配置指令
語(yǔ) 法: limit_rate rate; 默認值: limit_rate 0; 上下文: http, server, location, if in location
本條配置指令用來(lái)限制響應傳輸速率,單位為每秒字節數,如果設置為0表示禁用限速功能。這個(gè)限制是對每個(gè)請求來(lái)說(shuō)的(而不是對每個(gè)客戶(hù)端來(lái)限制的),也就是說(shuō)如果同一個(gè)客戶(hù)端同時(shí)開(kāi)啟了兩個(gè)鏈接,那么總的最大響應速率降是這個(gè)限制速率的兩倍。
配置的參數值可以支持變量(從1.17.0版本開(kāi)始)。這可能在限制的速率值依賴(lài)于某個(gè)條件的常見(jiàn)下面顯得非常有用,譬如:
map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
上例利用map模塊,將$slow變量的值映射為$rate變量的值,譬如$slow變量為1,那么映射出$rate為4k。這樣子,limit_rate就可以根據$slow的值來(lái)設置最終要限制的響應速率了。
這樣子,結合map模塊的功能,我們完全可以讓限速功能變得得更加靈活,譬如根據http header的某個(gè)值來(lái)映射速率,根據請求的url或者域名來(lái)限制速率等等,這里就不在贅述了。
2.2 limit_rate_after 配置指令
語(yǔ) 法: limit_rate_after size; 默認值:limit_rate_after 0; 上下文: http, server, location, if in location
備 注:
本條配置指令從0.8.0版本開(kāi)始生效。
本條配置指令用來(lái)設置在給客戶(hù)端發(fā)送的響應的字節數超過(guò)指定的值以后才開(kāi)始限速。和limit_rate配置指令一樣,從1.17.0版本開(kāi)始,可以支持變量方式配置。
這樣指令在流媒體播放的場(chǎng)景下面比較有用,為了支持播放器能夠盡量縮短播放前的加載時(shí)間,我們就需要在剛開(kāi)始的時(shí)候盡可能快速地將視頻文件的頭部發(fā)送給客戶(hù)端;而等到播放器滿(mǎn)足播放條件開(kāi)始播放的時(shí)候,我們又不太希望播放器加載得太快從而浪費服務(wù)器的資源和網(wǎng)絡(luò )資源,所以需要限制客戶(hù)端的下載速度到某一個(gè)合理的值,只要保證播放器能夠流暢播放即可。
而limit_rate_after的配置指令正好滿(mǎn)足的這個(gè)場(chǎng)景的需求。
2.3 其他限速配置
nginx還可以支持通過(guò)設置$limit_rate變量參數來(lái)對響應速度進(jìn)行限制,這樣就可以在nginx的運行過(guò)程中,由腳本或者插件動(dòng)態(tài)設置響應速率,這樣子限速邏輯更加靈活了。不過(guò),從1.17.0版本開(kāi)始,nginx官方不推薦使用這個(gè)方法。
nginx還支持上游服務(wù)器通過(guò)X-Accel-Limit-Rateheader頭來(lái)告訴nginx對本次響應進(jìn)行限速多少的功能。這里不再贅述。
更多小知識,可聯(lián)系藍隊云一起探討。
售前咨詢(xún)
售后咨詢(xún)
備案咨詢(xún)
二維碼
TOP