天天看點

Nginx限流筆記

Nginx 限流筆記

前言

Nginx 官網:

http://nginx.org/

Nginx 限流

Nginx 提供兩種限流方式

  1. 控制速率
  2. 控制并發連接配接數

一、控制速率

控制速率的方式之一就是采用漏桶算法

1)漏桶算法實作控制速率限流

漏桶(Leaky Bucket)算法思路很簡單,水(請求)先進入漏桶裡,漏桶以一定的速度出水(接口有響應速率),當水流入速度過大會直接溢出(通路頻率超過接口響應速率),然後就拒絕請求,可以看出漏桶算法能強行限制資料的傳輸速率

2)Nginx 配置

  • 首先在 Nginx 配置檔案配置緩存空間
# $binary_remote_addr 表示根據請求 ip 進行限流,
# zone=contentRateLimit:10m 表示緩存指令空間
# rate=2r/s 表示每秒2個請求
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;      
  • 在 location 中使用限流配置
# 使用定義的限流配置,zone=緩存指令空間
limit_req zone=contentRateLimit      

可以設定漏桶大小(在 location 中使用限流配置)

# 使用定義的限流配置,zone=緩存指令空間,burst 表示每秒處理2個請求,其他的請求放到隊列中,超過 burst 限制的,直接拒絕處理
limit_req zone=contentRateLimit burst=4      

二、控制并發連接配接數(連接配接數)

ngx_http_limit_conn_module 提供了限制連接配接數的能力。主要是利用 limit_conn_zone 和 limit_conn 兩個指令。

利用連接配接數限制某一個使用者的 ip 連接配接的數量來控制流量。

注意:并非所有連接配接都被計算在内,隻有當伺服器正在處理請求并且已經讀取了整個請求頭時,才會計算有效連接配接。

配置文法:

Syntax: limit_conn zone number;
Default: -;
Context: http, server, location;      

利用連接配接數限制某一個使用者的 IP 連接配接的數量來控制流量

Nginx 配置

1)根據 ip 位址來限制,存儲記憶體大小為 10M

# $binary_remote_addr 表示根據請求 ip 進行限流,
# zone=contentRateLimit:10m 表示緩存指令空間
limit_conn_zone $binary_remote_addr zone=add:1m      

2)在 location 中配置

# 表示每個位址每秒鐘兩個請求
limit_conn addr 2;      

限制每一個用戶端 IP 與伺服器的連接配接數,同時限制與虛拟機的連接配接總數

配置如下:

# 定義緩存空間
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    listen 80;
    server_name localhost;
    charset utf-8;
    location / {
        # 單個用戶端 IP 與伺服器的連接配接數
        limit_conn perip 10;
        # 限制與伺服器的總連接配接數
        limit_conn perserver 100;
        root html;
        index index.html index.htm;
    }
}      

繼續閱讀