返回列表 发布新帖
查看: 75|回复: 0

如何限制每个 IP 的请求数?

发表于 5 天前 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在网站运维过程中,我们常常遇到一些异常请求,例如某个 IP 在短时间内频繁访问网站,导致服务器 CPU 占用过高、带宽被占满、甚至影响正常用户的访问。
为了防止这种情况,我们需要 限制每个 IP 的请求数,即所谓的 请求速率限制(Rate Limiting)。
本文将介绍几种常见的实现方式,包括在 Nginx、Apache、以及 防火墙层 的配置方法。
一、为什么要限制 IP 请求数?
主要有以下几个原因:
  • 防止恶意爬虫或暴力破解
一些爬虫会在极短时间内频繁请求页面,造成网站卡顿甚至宕机。
  • 防止 DDoS 攻击初期的流量冲击
虽然限制 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次请求也会触发封锁。
重启服务:
  1. 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 的请求数是防御恶意访问的重要手段之一。
合理配置限速策略,不仅能保护服务器资源,还能保障网站的稳定与安全。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.105407 second(s), 6 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表