白名单与限流独立性说明文档
📊 核心问题
用户需求:白名单和限流必须是完全独立的两个功能,不是耦合的。
- 白名单:访问控制(IP 不在白名单 → 403 Forbidden)
- 限流:速率控制(请求超限 → 429 Too Many Requests)
- 独立性:即使 IP 在白名单内,也要受到限流限制
⚡ 快速参考:配置场景
场景对比表
详细说明: 配置场景详解
关键要点
- 未配置白名单 = 允许所有 IP(不是拒绝所有)
- 白名单 IP 也会被限流(独立版本)
- 全局白名单优先级更高(但仍需限流检查)
- 推荐配置:白名单 + 限流(双重保护)
❌ 错误实现(耦合版本)
问题代码
之前的 express-ip-whitelist-advanced.js 等文件中:
问题分析
实际效果
结论:白名单 IP 不受限流控制,两者是耦合的 ❌
✅ 正确实现(独立版本)
核心原则
两个独立的中间件:
- 白名单中间件:只负责验证 IP
- 限流中间件:只负责速率控制
实现代码
1. 白名单中间件(独立)
2. 限流中间件(独立)
3. 组合使用
实际效果
结论:白名单 IP 也受限流控制,两者完全独立 ✅
📋 对比表格
🧪 测试验证
测试场景 1: 白名单 IP 被限流
预期结果(独立版本):
错误结果(耦合版本):
测试场景 2: 非白名单 IP
预期结果(两个版本一致):
📁 文件对比
🎯 使用建议
场景 1: 公开 API
需求:所有人可以访问,但有限流
配置:
场景 2: 管理后台
需求:只允许办公室 IP,且有限流
配置:
场景 3: 内部 API
需求:只允许内网 IP 段,高限流
配置:
场景 4: 不同操作不同限流
需求:同一白名单,不同操作不同限流
配置:
🚀 快速开始
Express 独立版本
Koa 独立版本
📚 相关文档
- Express 独立版本:
examples/express-ip-whitelist-independent.js - Koa 独立版本:
examples/koa-ip-whitelist-independent.js - 耦合版本(参考):
examples/express-ip-whitelist-advanced.js
✅ 总结
核心区别
关键点
- ✅ 白名单中间件:只负责验证 IP(403)
- ✅ 限流中间件:只负责速率控制(429)
- ✅ 完全独立:白名单 IP 也会被限流
- ✅ 顺序清晰:白名单 → 限流 → 业务
推荐使用
- ✅ 使用
express-ip-whitelist-independent.js - ✅ 使用
koa-ip-whitelist-independent.js - ❌ 避免使用耦合版本
文档创建时间: 2026-02-05
版本: v1.0
状态: ✅ 完成