nginx使用內(nèi)置模塊配置限速限流的方法實(shí)例
有時(shí)候 NGINX 面對(duì)一些特殊的場(chǎng)景時(shí),需要進(jìn)行一定的限速限流的配置,比如一個(gè)官網(wǎng),可能前端靜態(tài)文件是非常小的,但是同時(shí)配置的還有一些 apk 包,這些包如果不做任何限制,可能會(huì)形成比較大的負(fù)載或者帶寬的壓力,我這邊碰到了,今天就來(lái)針對(duì)這個(gè)問(wèn)題處理一下。
沒(méi)有限制之前,對(duì)應(yīng)的包下載速度如下:

添加如下配置,進(jìn)行一定的限制:
http {
...#省略
limit_conn_zone $binary_remote_addr zone=addr:10m;
...#省略
}
server {
listen 80 default;
server_name localhost;
location ~ "^/test/app/" {
limit_conn addr 6;
limit_rate_after 10m;
limit_rate 1200k;
limit_conn_status 499;
limit_conn_log_level warn;
root /app;
}
}
說(shuō)明:
http 區(qū)域,我這里使用的是 1.15 版本的,默認(rèn)已經(jīng)安裝了對(duì)應(yīng)的模塊ngx_http_limit_conn_module。
limit_conn_zone:是一個(gè)固定的名稱(chēng),下邊調(diào)用的時(shí)候與之對(duì)應(yīng)。 $binary_remote_addr:表示通過(guò)
remote_addr 這個(gè)標(biāo)識(shí)來(lái)做限制,“binary_” 的目的是縮寫(xiě)內(nèi)存占用量,是限制同一客戶(hù)端 ip 地址。
zone=addr:10m:示生成一個(gè)大小為 10M,名字為 addr 的內(nèi)存區(qū)域,用來(lái)存儲(chǔ)訪問(wèn)的頻次信息。
server 區(qū)域,可以直接寫(xiě)在 server 區(qū)域內(nèi),表示限制所有,也可以寫(xiě)到對(duì)應(yīng)的 location 當(dāng)中,以表示單獨(dú)區(qū)域限制。
limit_conn:表示單個(gè) IP 限制最大連接數(shù)為 6。 limit_rate_after:表示請(qǐng)求前 10m 大小時(shí)不限速。
limit_rate:表示單個(gè)連接最大連接帶寬限制為 1200k。 limit_conn_status:設(shè)置拒絕請(qǐng)求的返回值。值只能設(shè)置400 到 599 之間(默認(rèn)是 503)。 limit_conn_log_level:定義日志級(jí)別,默認(rèn) error。
現(xiàn)在簡(jiǎn)單的做一下測(cè)試看看下載速度:

可以看到對(duì)應(yīng)的速度已經(jīng)收到限制,而且是在 10M 之后速度開(kāi)始慢慢下降,直至達(dá)到限制的位置。現(xiàn)在可以簡(jiǎn)單壓測(cè)看下情況:
$ ab -n 10 -c 10 http://www.test.com/res/app/app-xiaomi-release.apk
這條命令表示請(qǐng)求 10 次對(duì)應(yīng)資源,并發(fā)為 10。監(jiān)控對(duì)應(yīng)日志,看到如下結(jié)果,因?yàn)槲覀兌x的最大并發(fā)是 6,所以將會(huì)有 4 個(gè)失敗,并返回 499 狀態(tài)碼,然后有 6 個(gè)成功。
$tailf -n 100 a |awk -F "," '{print $6}'
"response": "499"
"response": "499"
"response": "499"
"response": "499"
"response": "200"
"response": "200"
"response": "200"
"response": "200"
"response": "200"
"response": "200"
另外在壓測(cè)命令之后,還有一些輸出可以參考:
Total transferred: 403483116 bytes HTML transferred: 403481400 bytes Requests per second: 0.18 [#/sec] (mean) Time per request: 56865.501 [ms] (mean) Time per request: 5686.550 [ms] (mean, across all concurrent requests) Transfer rate: 6929.10 [Kbytes/sec] received
其他的不說(shuō)了,只看最后一條,可以看到總的對(duì)外輸出是大約7M/s,正好符合單條限制 1.2M/s 乘以 6 的數(shù)值。
總結(jié)
到此這篇關(guān)于nginx使用內(nèi)置模塊配置限速限流的文章就介紹到這了,更多相關(guān)nginx內(nèi)置模塊配置限速限流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Nginx幾種常見(jiàn)實(shí)現(xiàn)301重定向方法上的區(qū)別
本篇文章主要介紹了詳解Nginx幾種常見(jiàn)實(shí)現(xiàn)301重定向方法上的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
nginx之virtual host虛擬主機(jī)的配置實(shí)現(xiàn)
虛擬主機(jī)(vhost)技術(shù)允許一臺(tái)物理服務(wù)器托管多個(gè)獨(dú)立網(wǎng)站或應(yīng)用,每個(gè)虛擬主機(jī)擁有獨(dú)立的域名、配置文件等,實(shí)現(xiàn)資源隔離管理,Nginx服務(wù)器通過(guò)配置文件實(shí)現(xiàn)虛擬主機(jī)設(shè)置,感興趣的可以了解一下2024-11-11
nginx中封禁ip和允許內(nèi)網(wǎng)ip訪問(wèn)的實(shí)現(xiàn)示例
Nginx不僅僅只是一款反向代理和負(fù)載均衡服務(wù)器,本文主要介紹了nginx中封禁ip和允許內(nèi)網(wǎng)ip訪問(wèn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
nginx請(qǐng)求時(shí)找路徑問(wèn)題解決
當(dāng)你安裝了nginx的時(shí)候,為nginx配置了如下的location,想要去訪問(wèn)路徑下面的內(nèi)容,可是總是出現(xiàn)404,找不到文件,這是什么原因呢,今天我們就來(lái)解決這個(gè)問(wèn)題,感興趣的朋友一起看看吧2023-10-10
Nginx 配置反向代理使用 Google fonts 字體并開(kāi)啟 HTTP2/SSL 支持
nginx作為web服務(wù)器一個(gè)重要的功能就是反向代理。當(dāng)然你也可以使用nginx配置正向代理,本是介紹如何配置nginx的反向代理。nginx反向代理的指令不需要新增額外的模塊,默認(rèn)自帶proxy_pass指令,只需要修改配置文件就可以實(shí)現(xiàn)反向代理。2017-04-04
Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法
這篇文章主要介紹了Nginx訪問(wèn)控制與參數(shù)調(diào)優(yōu)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
nginx做代理轉(zhuǎn)發(fā)前端請(qǐng)求到后端的代碼示例
Nginx作為反向代理服務(wù)器,可以有效處理請(qǐng)求并轉(zhuǎn)發(fā)到后端服務(wù)器,這篇文章主要介紹了nginx做代理轉(zhuǎn)發(fā)前端請(qǐng)求到后端的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01

