Files
LabelChange-server/.trae/documents/接口限流模块开发计划.md
2026-06-01 16:30:29 +08:00

59 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 接口限流模块开发计划
## 需求背景
客户频繁推送历史数据,导致系统负载过高,需要开发接口限流模块限制客户端请求频率。
## 技术选型
使用成熟的`AspNetCoreRateLimit`库实现限流功能,该库支持:
- IP地址限流
- 客户端ID限流
- 全局限流
- 自定义限流规则
- 可配置的限流阈值
- 支持内存存储和分布式存储
## 实现步骤
### 0. 前置说明Nginx反向代理场景支持
应用层完全可以实现限流针对Nginx反向代理场景
- 需要配置Nginx转发客户端真实IP添加`X-Forwarded-For``X-Real-IP`请求头)
- 应用层配置`ForwardedHeaders`中间件读取真实客户端IP进行限流
- 限流规则依然可以基于真实IP生效不受反向代理影响
### 1. 安装NuGet包
安装`AspNetCoreRateLimit``Microsoft.AspNetCore.HttpOverrides` NuGet包到CONTROLLER项目
### 2. 配置限流规则
`appsettings.json`中添加限流配置:
- 支持按IP限流默认限制每分钟60次请求
- 支持针对特定IP白名单/黑名单
- 支持针对特定接口设置不同的限流规则
- 限流响应返回429 Too Many Requests状态码包含重试时间提示
### 3. 注册服务与代理配置
`Program.cs`中添加相关配置:
- 配置`ForwardedHeaders`中间件支持读取Nginx转发的真实客户端IP
- 注册内存缓存(已存在,可复用)
- 注册IP限流配置指定从`X-Forwarded-For`头读取客户端IP
- 注册限流策略
### 4. 配置中间件
`Program.cs`的中间件管道中添加限流中间件,放在路由中间件之前,控制器中间件之前
### 5. 自定义限流响应(可选)
自定义限流触发时的返回格式,与系统现有错误响应格式保持一致
### 6. 测试验证
- 模拟高频请求,验证限流是否生效
- 验证白名单IP是否不受限流限制
- 验证不同接口的限流规则是否正确应用
### 7. 文档更新
在配置文档中说明限流相关配置项的含义和修改方法
## 预期效果
- 恶意高频请求被拦截返回429状态码
- 正常用户请求不受影响
- 限流阈值可通过配置文件灵活调整,无需重新发布
- 系统负载显著降低