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;
}
}
}
在这个例子中,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;
}
}
}