xfy 6543422281 docs: 添加 Nginx 配置和 Lua 脚本示例文档
- config: 反向代理、缓存、负载均衡、安全、SSL 等配置模板
- lua: API 网关、认证、动态路由、限流、WebSocket 等脚本示例

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 17:59:22 +08:00

49 lines
1.3 KiB
Markdown

# 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 进行限流
## 配置示例
```nginx
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 进行限流。