在Web服务中,为单个IP设置每秒请求限制(Rate Limiting)是防止滥用、DDoS攻击和资源耗尽的重要手段。合理的限流阈值需根据具体业务场景、服务器性能和安全策略综合判断。
以下是一些常见且相对安全的参考值:
✅ 一般建议的安全范围:
| 场景 | 每秒请求数(RPS) | 说明 |
|---|---|---|
| 普通网站 / API 接口 | 5 – 10 RPS | 防止爬虫和自动化脚本滥用 |
| 高流量公开API | 10 – 20 RPS | 对注册用户放宽限制 |
| 敏感操作接口(如登录) | 1 – 3 RPS | 防止暴力破解 |
| 静态资源(图片、CSS等) | 10 – 30 RPS | 可适当放宽,但需防刷 |
| 严格防护模式(如X_X类) | 1 – 5 RPS | 安全优先 |
🔐 安全考虑因素:
-
防暴力破解
登录、短信验证码等接口应更严格(如:1-2次/秒,5分钟内超过10次则封禁)。 -
突发流量容忍(Burst)
建议使用“令牌桶”算法,允许短时间突发(如:允许10次/秒,但突发可到20次)。 -
区分用户身份
- 匿名用户:限制更严(如 5 RPS)
- 认证用户(带Token):可放宽(如 20-50 RPS)
-
结合时间窗口
不只是“每秒”,还可设置:- 每分钟最多 100 次
- 每小时最多 1000 次
-
动态调整与监控
根据日志分析真实用户行为,避免误伤正常用户。
🛠 实际配置示例(Nginx):
# 限制每个IP每秒最多10个请求,突发允许20个
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
location /api/ {
limit_req zone=api burst=20 nodelay;
proxy_pass http://backend;
}
⚠️ 注意事项:
- 过于宽松 → 易被爬取或攻击
- 过于严格 → 正常用户(如手机端弱网重试)可能被误封
- 使用 CDN 或 WAF(如 Cloudflare)可内置高级限流规则
✅ 推荐实践:
- 起始值设为 10 RPS(匿名用户),观察日志调整。
- 敏感接口用 滑动窗口 + IP + 用户ID 多维度限流。
- 结合 IP信誉库、行为分析 做智能限流。
总结:
一个比较安全且通用的默认值是:单个IP 10次/秒(10 RPS),并配合突发控制和长时间窗口限制,同时根据业务类型灵活调整。
如果你提供具体的业务类型(如电商、社交、API平台等),我可以给出更精准的建议。
云小栈