rate_limit
`rate_limit` 指令通过使用 Redis 作为后端存储和管理,控制 NGINX 服务器处理的请求速率。
Redis backed rate limit module for Nginx
·
httpserverlocation
语法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 请求的速率限制,基于通过 geo、map 或其他方式定义的 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 参数时。
⚠
用于限流的键必须被谨慎定义,以避免冲突或对请求产生意外的限制。