欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Nginx怎么實現(xiàn)限流

這篇文章主要為大家展示了“Nginx怎么實現(xiàn)限流”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“Nginx怎么實現(xiàn)限流”這篇文章吧。

金安網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),金安網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為金安上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的金安做網(wǎng)站的公司定做!

Nginx 限流

Nginx為我們提供了請求限制模塊(ngx_http_limit_req_module)、基于令牌桶算法的流量限制模塊(ngx_stream_limit_conn_module),可以方便的控制令牌速率,自定義調(diào)節(jié)限流,實現(xiàn)基本的限流控制…

請求限制

請求限制的功能來自于 ngx_http_limit_req_module 模塊。使用它需要首先在 http 配置段中定義限制的參照標準和狀態(tài)緩存區(qū)大小。

limit_req_zone 只能配置在 http 范圍內(nèi);

$binary_remote_addr 表示客戶端請求的IP地址;

mylimit 自己定義的變量名;

rate 請求頻率,每秒允許多少請求;

limit_req 與 limit_req_zone 對應(yīng),burst 表示緩存住的請求數(shù),也就是任務(wù)隊列。

下面的配置就是定義了使用客戶端的 IP 作為參照依據(jù),并使用一個 10M 大小的狀態(tài)緩存區(qū)。結(jié)尾的 rate=1r/s 表示針對每個 IP 的請求每秒只接受一次。

10M 的狀態(tài)緩存空間夠不夠用呢?官方給出的答案是 1M 的緩存空間可以在 32 位的系統(tǒng)中服務(wù) 3.2 萬 IP 地址,在 64 位的系統(tǒng)中可以服務(wù) 1.6 萬 IP 地址,所以需要自己看情況調(diào)整。如果狀態(tài)緩存耗光,后面所有的請求都會收到 503(Service Temporarily Unavailable) 錯誤。

腳本代碼

# 定義了一個 mylimit 緩沖區(qū)(容器),請求頻率為每秒 1 個請求(nr/s)
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
listen  70;
location / {
# nodelay 不延遲處理
# burst 是配置超額處理,可簡單理解為隊列機制
# 上面配置同一個 IP 沒秒只能發(fā)送一次請求(1r/s),這里配置了緩存3個請求,就意味著同一秒內(nèi)只能允許 4 個任務(wù)響應(yīng)成功,其它任務(wù)請求則失?。?03錯誤)
limit_req zone=mylimit burst=3 nodelay;
proxy_pass http://localhost:7070;
}
}

測試代碼

為了方便此處提供 JAVA、AB 兩種測試代碼..

# -n 即指定壓力測試總共的執(zhí)行次數(shù)
# -c 即指定的并發(fā)數(shù)
ab -n 5 -c 5 http://192.168.0.133:70/index
package com.battcn.limiting;

import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author Levin
 * @since 2018/7/27 0027
 */
public class NginxLimiterTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService service = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 6; i++) {
            CompletableFuture.supplyAsync(() -> {
                final ResponseEntity<String> entity = new RestTemplate().getForEntity("http://192.168.0.133:70/index", String.class);
                return entity.getBody();
            }, service).thenAccept(System.out::println);
        }
        service.shutdown();
    }
}

測試日志

此處提供 AB 測試結(jié)果 JAVA 的日志就不貼了,5個請求其中一個請求是有問題的,出問題的那個就是被拒絕請求的…

[root@localhost myconf]# ab -n 5 -c 5 http://192.168.0.133:70/index
Document Path:          /index
Document Length:        34 bytes

Concurrency Level:      5
Time taken for tests:   0.002 seconds
Complete requests:      5
Failed requests:        1
   (Connect: 0, Receive: 0, Length: 1, Exceptions: 0)

并發(fā)限制

Nginx 并發(fā)限制的功能來自于 ngx_http_limit_conn_module 模塊,跟請求配置一樣,使用它之前,需要先定義參照標準和狀態(tài)緩存區(qū)。

limit_conn_zone 只能配置在 http 范圍內(nèi);

$binary_remote_addr 表示客戶端請求的IP地址;

myconn 自己定義的變量名(緩沖區(qū));

limit_rate 限制傳輸速度

limit_conn 與 limit_conn_zone 對應(yīng),限制網(wǎng)絡(luò)連接數(shù)

下面的配置就是定義了使用客戶端的 IP 作為參照依據(jù),并使用一個 10M 大小的狀態(tài)緩存區(qū)。限定了每個IP只允許建立一個請求連接,同時傳輸?shù)乃俣茸畲鬄?1024KB

腳本代碼

# 定義了一個 myconn 緩沖區(qū)(容器)
limit_conn_zone $binary_remote_addr zone=myconn:10m;
server {
listen  70;
location / {
# 每個 IP 只允許一個連接
limit_conn myconn 1;
# 限制傳輸速度(如果有N個并發(fā)連接,則是 N * limit_rate)
limit_rate 1024k;
proxy_pass http://localhost:7070;
}
}

以上是“Nginx怎么實現(xiàn)限流”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

標題名稱:Nginx怎么實現(xiàn)限流
文章源于:http://chinadenli.net/article12/gohcdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號域名注冊、ChatGPT網(wǎng)站維護、網(wǎng)站策劃企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計