nginx限流的实现方式 Nginx 提供了两种主要的限流方式:速率限制和并发限制。

1、速率限制:通过 ngx_http_limit_req_module 模块实现,可以限制每秒的请求数(RPS)。

在 Nginx 配置文件中,首先需要定义一个速率区域(ratezone),然后在 server 或 location 块中应用这个区域。

http { limit_req_zone $binary_remote_addr zone=myzone:10m rate=5r/s;

server {
    location / {
        limit_req zone=myzone burst=10 nodelay;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

}

在这个例子中,limit_req_zone 指令定义了一个名为 myzone 的速率区域,它可以存储 10MB 的状态信息,并且限制每个 IP 地址每秒不超过 5 个请求。limit_req 指令在 location 块中启用限流,burst=10 允许在超出速率限制时进行突发处理(最多 10 个请求),nodelay 表示超过速率限制的请求会立即被拒绝。

2、并发限制:通过 ngx_http_limit_conn_module 模块实现,可以限制并发连接数。

http { limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
    listen 80;

    location / {
        limit_conn addr 1;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

}