IP 白名单动态配置 - 快速使用指南
⚠️ 重要:配置场景说明
在开始之前,请先了解白名单和限流的配置关系:
四个核心问题
1️⃣ 只配置限流,不配置白名单
问题: 如果限流配置了 /internal,但白名单没配置 /internal,如何处理?
答案: ✅ 所有 IP 都可以访问 + 受限流限制
效果: 未配置白名单 = 允许所有 IP 访问,但要受限流控制
2️⃣ 只配置白名单,不配置限流
问题: 如果白名单配置了 /internal,但限流没配置 /internal,如何处理?
答案: ⚠️ 白名单 IP 无限制访问(不推荐)
效果:
- 非白名单 IP → 403 Forbidden
- 白名单 IP → 无限制访问(没有限流保护)
建议: ❌ 不推荐,应该白名单 + 限流一起配置
3️⃣ 白名单和限流都配置(推荐)
问题: 如果白名单配置了 /internal,限流也配置了 /internal,如何处理?
答案: ✅ 推荐配置 - 双重保护
效果:
- 非白名单 IP → 403 Forbidden(立即拒绝)
- 白名单 IP(1-500次)→ 200 OK
- 白名单 IP(501+次)→ 429 Too Many Requests
4️⃣ 全局白名单
问题: 白名单能否配置全局路由?
答案: ✅ 可以!而且非常推荐!
优先级: 全局白名单 > 路由白名单
详细说明: 参见 配置场景详解
🚀 快速开始
Express
Koa
Egg.js
参考 examples/egg-ip-whitelist-advanced.js 中的完整说明,需要完整的 Egg.js 项目结构。
📋 配置方式
方式 1: 环境变量(推荐)
方式 2: 配置文件
创建 config/ip-whitelist.json:
应用会自动加载此文件(如果存在)。
方式 3: 代码配置
🔧 动态管理 API
查看当前配置
响应:
添加全局白名单
响应:
移除全局白名单
添加路由白名单
🎯 使用场景
场景 1: 管理后台只允许办公室 IP
场景 2: 内部 API 限制内网访问
场景 3: 临时授权测试 IP
场景 4: VIP 客户更高限额
🔒 安全建议
1. 保护管理 API
2. 配置文件权限
3. 环境变量安全
4. 定期审查
建议每月审查一次白名单配置,移除不再需要的 IP。
📚 相关文档
- 完整实现报告:
reports/多框架IP白名单动态配置实现报告.md - 高级用法:
guides/advanced.md#ip-白名单与黑名单- - 基础示例:
examples/ip-whitelist-example.js - Express 高级:
examples/express-ip-whitelist-advanced.js - Koa 高级:
examples/koa-ip-whitelist-advanced.js - Egg.js 高级:
examples/egg-ip-whitelist-advanced.js
❓ 常见问题
Q1: 全局白名单和路由白名单的优先级?
A: 全局白名单优先级更高。如果 IP 在全局白名单中,将跳过所有路由的限制。
Q2: 如何测试 IP 白名单是否生效?
A:
Q3: 支持 IPv6 吗?
A: 支持!可以配置 IPv6 地址:
Q4: CIDR 格式如何使用?
A:
Q5: 动态添加的白名单会持久化吗?
A: 不会。动态添加的白名单只存在于内存中,重启后会丢失。如需持久化,应该:
- 将 IP 添加到环境变量
- 或更新配置文件
- 或实现数据库存储
Q6: 如何实现白名单持久化?
A: 扩展 IPWhitelistConfig 类,在 addGlobalWhitelist 等方法中:
更新时间: 2026-02-05