温馨提示×

ubuntu apache2如何限流

小樊
42
2026-09-11 04:46:43
栏目: 智能运维

在 Ubuntu 上使用 Apache2 进行限流(限速 / 限制请求频率),常见做法有以下几种,按“使用频率”和“实现方式”给你总结:


一、使用 mod_ratelimit(Apache 自带,最简单,限速)

作用:限制每个连接的响应速度(带宽限速)

1. 启用模块

sudo a2enmod ratelimit
sudo systemctl restart apache2

2. 配置示例(全局或虚拟主机)

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <Location />
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 100
    </Location>
</VirtualHost>

说明:

  • rate-limit 100 表示 100 KB/s
  • 只对下载/响应生效,不限制请求次数

二、使用 mod_evasive(防 CC / 限制请求频率)

作用:限制单位时间内的请求次数(防刷接口)

1. 安装

sudo apt update
sudo apt install libapache2-mod-evasive

2. 启用模块

sudo a2enmod evasive

3. 配置(示例)

编辑:

sudo nano /etc/apache2/mods-enabled/evasive.conf

内容示例:

<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 10
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 60
</IfModule>

含义:

  • 1 秒内同一页面请求 >10 次 → 封禁
  • 1 秒内全站请求 >50 次 → 封禁
  • 封禁 60 秒

重启:

sudo systemctl restart apache2

三、使用 mod_security(高级限流 / WAF)

作用:复杂规则、IP 限流、接口限流

安装

sudo apt install libapache2-mod-security2
sudo a2enmod security2

示例(限制某接口 QPS)

SecRuleEngine On
SecRule IP:RATE_LIMIT "gt 5" \
    "id:1001,phase:1,deny,status:429,msg:'Too many requests'"

适合:

  • API 接口
  • 防爬
  • 企业级防护

四、在 Nginx 前做限流(推荐架构)

如果可以,Apache 前加 Nginx:

  • Nginx:limit_req
  • Apache:只做业务

这是生产环境最常见方案。


五、按 IP 限流(iptables / ufw)

# 每秒最多 10 个新连接
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/s -j ACCEPT

适合:

  • 粗暴防护
  • 抗攻击

推荐方案总结

需求 推荐
限制下载速度 mod_ratelimit
防接口刷量 mod_evasive
高级规则 mod_security
高性能限流 Nginx + Apache

如果你能告诉我:

  • 是 接口限流 还是 带宽限速
  • 是否用于 API / 网站 / 下载

我可以给你一套可直接用的配置。

0 踩