limit_req

'limit_req' 指令控制 NGINX 处理请求的速率,以防止过载。 — NGINX HTTP Core

limit_req
httpserverlocation
语法limit_req zone=name [burst=number] [nodelay];
默认值none
上下文http, server, location
模块NGINX HTTP Core
参数1-3

说明

'limit_req' 指令用于在 NGINX 中限制客户端在指定时间内向服务器发起的请求数量。该指令属于 HTTP Core Module,可在多种上下文中使用,包括 http、server 和 location 块。此指令的主要目的是控制流量并防止客户端滥用(例如发送过多请求),以免影响服务器的性能和稳定性。 'limit_req' 指令接受一到三个参数: 1. **zone**(必需):存储请求速率限制配置的共享内存区域。 2. **burst**(可选):当短时超过限额时,允许处理一定数量的超额请求(无需延迟)。burst 值允许应对流量突增。 3. **nodelay**(可选):如果指定,超额请求在不超过 burst 限制时将立即被处理;否则将根据速率限制被延迟。 在使用 'limit_req' 之前,用户需要使用 'limit_req_zone' 指令定义一个共享内存区域。速率限制基于这些区域中定义的参数,这些参数决定在指定时间内来自特定键(例如 IP 地址)的请求数量。

配置示例

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
    location /api {
        limit_req zone=mylimit burst=5 nodelay;
    }
}

在使用 'limit_req' 之前,确保已使用 'limit_req_zone' 正确定义共享内存区域。

注意 'burst' 值,以免允许过多请求导致服务器过载。

如果未正确配置,使用 'nodelay' 可能导致流量出现剧烈峰值。