在 Ubuntu 上使用 Apache2 进行限流(限速 / 限制请求频率),常见做法有以下几种,按“使用频率”和“实现方式”给你总结:
mod_ratelimit(Apache 自带,最简单,限速)作用:限制每个连接的响应速度(带宽限速)
sudo a2enmod ratelimit
sudo systemctl restart apache2
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Location />
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 100
</Location>
</VirtualHost>
说明:
rate-limit 100 表示 100 KB/smod_evasive(防 CC / 限制请求频率)作用:限制单位时间内的请求次数(防刷接口)
sudo apt update
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
编辑:
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>
含义:
重启:
sudo systemctl restart apache2
mod_security(高级限流 / WAF)作用:复杂规则、IP 限流、接口限流
sudo apt install libapache2-mod-security2
sudo a2enmod security2
SecRuleEngine On
SecRule IP:RATE_LIMIT "gt 5" \
"id:1001,phase:1,deny,status:429,msg:'Too many requests'"
适合:
如果可以,Apache 前加 Nginx:
limit_req这是生产环境最常见方案。
# 每秒最多 10 个新连接
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/s -j ACCEPT
适合:
| 需求 | 推荐 |
|---|---|
| 限制下载速度 | mod_ratelimit |
| 防接口刷量 | mod_evasive |
| 高级规则 | mod_security |
| 高性能限流 | Nginx + Apache |
如果你能告诉我:
我可以给你一套可直接用的配置。