rate_limit

`rate_limit` 指令通过使用 Redis 作为后端存储和管理,控制 NGINX 服务器处理的请求速率。

语法rate_limit key requests=number period=size [burst=number] [rate_limit_prefix=prefix] [rate_limit_pass=upstream];
默认值none
上下文http, server, location
参数1-4

说明

rate_limit 指令通过将 Redis 作为后端集成,启用对 NGINX 请求的速率限制,基于通过 geomap 或其他方式定义的 key。通过与 Redis 后端集成,它提供按 key 管理和执行限流的能力,该 key 可以代表用户 IP 地址或与请求相关的任何其他标识符。该指令可以在不同的上下文中配置,例如 HTTP、server 或 location 块,并接受 1 到 4 个参数,从而实现灵活的流量速率控制配置。

可以为 rate_limit 指令指定多个参数:表示用户或适用限流的标识符的 key、允许的请求数(requests)、计数这些请求的定义周期(period),以及一个可选的突发参数(burst),用于指定在强制限流之前短时间内允许的额外请求数。该指令在 Redis 中维护状态并跟踪这些已配置 key 的使用情况,使其成为保护资源免受滥用并更有效控制流量的强大工具。

如果某个 key 超过其限制,该指令可以返回指定的状态码,通常为 429(请求过多),以告知客户端已实施限流。这有助于更好地控制 API 和 Web 服务的使用模式,既保护服务器又改善用户体验。

配置示例

location = /limit {
    rate_limit $limit_key requests=15 period=1m burst=20;
    rate_limit_pass redis;
}

确保 Redis 已正确配置并且 NGINX 可访问,以避免意外错误。

使用真实流量进行测试,以避免对合法用户进行过度限制,特别是在使用 burst 参数时。

用于限流的键必须被谨慎定义,以避免冲突或对请求产生意外的限制。

← 返回所有指令