lolly/docs/lua/rate-limiting

Rate Limiting with Lua

基于 ngx.shared.DICT 的自定义速率限制示例,弥补 NGINX 原生 limit_req 模块在动态策略上的不足。

功能

  • 基于客户端 IP 的请求速率限制
  • 基于 API Key 的请求速率限制
  • 自定义限流阈值与时间窗口
  • 返回标准的 429 Too Many Requests 响应

文件说明

文件 用途
nginx.conf NGINX 配置示例,定义共享内存区域和 Lua 挂载点
access.lua Lua 速率限制实现脚本

快速开始

  1. nginx.conf 中配置 lua_shared_dict 共享内存区域
  2. 在对应的 location 块中使用 access_by_lua_file 引入脚本
  3. 通过请求头 X-API-Key 或客户端 IP 进行限流

配置示例

http {
    # 定义共享内存:名称 大小
    lua_shared_dict rate_limit 10m;

    server {
        location /api/ {
            access_by_lua_file /path/to/access.lua;
            proxy_pass http://backend;
        }
    }
}

限流策略

标识方式 优先级 默认阈值 时间窗口
API Key (X-API-Key) 100 req 60 秒
客户端 IP 20 req 60 秒

当同时存在 API Key 和 IP 时,优先使用 API Key 进行限流。