溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx怎么使用內(nèi)置模塊配置限速限流

發(fā)布時間:2022-05-05 10:45:03 來源:億速云 閱讀:133 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“nginx怎么使用內(nèi)置模塊配置限速限流”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“nginx怎么使用內(nèi)置模塊配置限速限流”文章能幫助大家解決問題。

有時候 NGINX 面對一些特殊的場景時,需要進(jìn)行一定的限速限流的配置,比如一個官網(wǎng),可能前端靜態(tài)文件是非常小的,但是同時配置的還有一些 apk 包,這些包如果不做任何限制,可能會形成比較大的負(fù)載或者帶寬的壓力,我這邊碰到了,今天就來針對這個問題處理一下。

沒有限制之前,對應(yīng)的包下載速度如下:

nginx怎么使用內(nèi)置模塊配置限速限流

添加如下配置,進(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;
    }
}

說明:

http 區(qū)域,我這里使用的是 1.15 版本的,默認(rèn)已經(jīng)安裝了對應(yīng)的模塊ngx_http_limit_conn_module。

limit_conn_zone:是一個固定的名稱,下邊調(diào)用的時候與之對應(yīng)。 $binary_remote_addr:表示通過

remote_addr 這個標(biāo)識來做限制,“binary_” 的目的是縮寫內(nèi)存占用量,是限制同一客戶端 ip 地址。

zone=addr:10m:示生成一個大小為 10M,名字為 addr 的內(nèi)存區(qū)域,用來存儲訪問的頻次信息。

server 區(qū)域,可以直接寫在 server 區(qū)域內(nèi),表示限制所有,也可以寫到對應(yīng)的 location 當(dāng)中,以表示單獨區(qū)域限制。

limit_conn:表示單個 IP 限制最大連接數(shù)為 6。 limit_rate_after:表示請求前 10m 大小時不限速。

limit_rate:表示單個連接最大連接帶寬限制為 1200k。 limit_conn_status:設(shè)置拒絕請求的返回值。值只能設(shè)置400 到 599 之間(默認(rèn)是 503)。 limit_conn_log_level:定義日志級別,默認(rèn) error。

現(xiàn)在簡單的做一下測試看看下載速度:

nginx怎么使用內(nèi)置模塊配置限速限流

可以看到對應(yīng)的速度已經(jīng)收到限制,而且是在 10M 之后速度開始慢慢下降,直至達(dá)到限制的位置?,F(xiàn)在可以簡單壓測看下情況:

$ ab -n 10 -c 10 http://www.test.com/res/app/app-xiaomi-release.apk

這條命令表示請求 10 次對應(yīng)資源,并發(fā)為 10。監(jiān)控對應(yīng)日志,看到如下結(jié)果,因為我們定義的最大并發(fā)是 6,所以將會有 4 個失敗,并返回 499 狀態(tài)碼,然后有 6 個成功。

$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"

另外在壓測命令之后,還有一些輸出可以參考:

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

其他的不說了,只看最后一條,可以看到總的對外輸出是大約7M/s,正好符合單條限制 1.2M/s 乘以 6 的數(shù)值。

關(guān)于“nginx怎么使用內(nèi)置模塊配置限速限流”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI