# 接口限流模块开发计划 ## 需求背景 客户频繁推送历史数据,导致系统负载过高,需要开发接口限流模块限制客户端请求频率。 ## 技术选型 使用成熟的`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状态码 - 正常用户请求不受影响 - 限流阈值可通过配置文件灵活调整,无需重新发布 - 系统负载显著降低