58 lines
1.4 KiB
Markdown
58 lines
1.4 KiB
Markdown
|
|
# 每日限流中间件使用指南
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
每日限流中间件实现了多层限流策略:
|
|||
|
|
- 接口一天最大请求200次
|
|||
|
|
- 一个IP一天最多10次
|
|||
|
|
- 支持并发限制和安全防护
|
|||
|
|
|
|||
|
|
## 主要特性
|
|||
|
|
|
|||
|
|
1. **多层限流策略**
|
|||
|
|
- 接口总请求限制:200次/天
|
|||
|
|
- IP请求限制:10次/天/IP
|
|||
|
|
- 并发请求限制:5个/IP
|
|||
|
|
|
|||
|
|
2. **安全防护**
|
|||
|
|
- IP白名单/黑名单
|
|||
|
|
- User-Agent检查
|
|||
|
|
- Referer验证
|
|||
|
|
- 代理检测
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
// 配置限流参数
|
|||
|
|
limitConfig := middleware.DailyRateLimitConfig{
|
|||
|
|
MaxRequestsPerDay: 200, // 接口一天最大请求200次
|
|||
|
|
MaxRequestsPerIP: 10, // 一个IP一天最多10次
|
|||
|
|
KeyPrefix: "api_limit", // Redis键前缀
|
|||
|
|
TTL: 24 * time.Hour, // 24小时过期
|
|||
|
|
MaxConcurrent: 5, // 最大并发5个
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建中间件实例
|
|||
|
|
rateLimitMiddleware := middleware.NewDailyRateLimitMiddleware(
|
|||
|
|
config, redisClient, response, logger, limitConfig)
|
|||
|
|
|
|||
|
|
// 应用到路由
|
|||
|
|
router.Use(rateLimitMiddleware.Handle())
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 限流逻辑
|
|||
|
|
|
|||
|
|
1. 检查IP访问权限
|
|||
|
|
2. 验证User-Agent和Referer
|
|||
|
|
3. 检查并发限制
|
|||
|
|
4. 检查接口总请求次数(200次/天)
|
|||
|
|
5. 检查IP请求次数(10次/天)
|
|||
|
|
6. 更新计数器
|
|||
|
|
|
|||
|
|
## 监控信息
|
|||
|
|
|
|||
|
|
响应头包含隐藏的监控信息:
|
|||
|
|
- `X-Total-Count`: 当前总请求次数
|
|||
|
|
- `X-IP-Count`: 当前IP请求次数
|
|||
|
|
- `X-Reset-Time`: 重置时间
|