|
|
这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在网站运维过程中,我们常常遇到一些异常请求,例如某个 IP 在短时间内频繁访问网站,导致服务器 CPU 占用过高、带宽被占满、甚至影响正常用户的访问。
为了防止这种情况,我们需要 限制每个 IP 的请求数,即所谓的 请求速率限制(Rate Limiting)。
本文将介绍几种常见的实现方式,包括在 Nginx、Apache、以及 防火墙层 的配置方法。
一、为什么要限制 IP 请求数?
主要有以下几个原因:
一些爬虫会在极短时间内频繁请求页面,造成网站卡顿甚至宕机。
虽然限制 IP 无法抵御大规模攻击,但可以有效抵挡低强度的单源攻击。
对于 API 接口或登录请求,限制速率可以避免用户频繁调用导致数据库压力过大。
二、在 Nginx 中限制请求速率
Nginx 提供了两个重要模块用于限制请求速率:
limit_req_zone:定义限速规则和共享内存区域。
limit_req:应用限速策略到指定的请求路径。
示例配置:
http {
# 定义共享内存区域:每个IP的限制
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
listen 80;
server_name example.com;
location / {
# 应用速率限制
limit_req zone=one burst=20 nodelay;
proxy_pass http://127.0.0.1:8080;
}
}
} 参数解释:
- zone=one:10m:定义一个10MB大小的共享内存,可存储约16万个IP。
- rate=10r/s:每个IP每秒允许10个请求。
- burst=20:允许瞬时突发流量(最多20个请求)。
- nodelay:超出速率的请求立即返回503,不排队等待。
测试效果:
当同一 IP 请求频率超过设定速率时,Nginx 会返回:
HTTP/1.1 503 Service Temporarily Unavailable 三、在 Apache 中限制请求速率
Apache 可通过模块 mod_ratelimit 和 mod_evasive 实现请求控制。
使用 mod_evasive:
安装模块:
apt install libapache2-mod-evasive -y 编辑配置 /etc/apache2/mods-enabled/evasive.conf:
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60 参数说明:
- DOSPageCount:同一页面1秒内超过5次请求即触发限制。
- DOSBlockingPeriod:封锁该 IP 60 秒。
- DOSSiteCount:整个站点每秒超过50次请求也会触发封锁。
重启服务:
- systemctl restart apache2
复制代码 四、使用防火墙 (iptables) 限制请求数
如果不想修改Web服务器配置,可以通过 iptables 直接限制请求频率。
示例:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 1 --hitcount 20 -j DROP 含义:
- 每个 IP 每秒超过 20 次新的 TCP 连接请求将被丢弃。
- 这种方法适合防御暴力连接型攻击。
五、使用 CDN 或 WAF 实现限速
如果网站前端有使用 CDN(内容分发网络) 或 WAF(Web 应用防火墙),大多数平台(如 Cloudflare、阿里云、腾讯云、百度云加速等)都提供限频功能。
优势:
- 不占用服务器资源;
- 可灵活配置不同路径的速率;
- 对大规模访问更有效。
六、总结
| 方式 | 层级 | 优点 | 缺点 | | Nginx limit_req | 应用层 | 灵活配置、精细控制 | 需要修改配置 | | Apache mod_evasive | 应用层 | 简单有效 | 配置项少,较粗糙 | | iptables | 网络层 | 不依赖服务端应用 | 管理复杂,易误封 | | CDN/WAF | 云防护层 | 可防御大流量攻击 | 需第三方支持 | 七、最佳实践建议
对静态资源(图片、CSS)不建议限速;
对 API、登录、搜索等接口重点控制;
定期查看日志,调整限速参数;
配合监控报警系统(如 Prometheus + Grafana)实时观察请求量。
结语:
限制每个 IP 的请求数是防御恶意访问的重要手段之一。
合理配置限速策略,不仅能保护服务器资源,还能保障网站的稳定与安全。
|
|