在 CentOS 上,如果你说的 apache2 实际是指 Apache HTTP Server(httpd)(CentOS 一般用 httpd 而不是 apache2),限流通常有以下几种常见做法。
适合防止慢速攻击、限制请求时间。
httpd -M | grep reqtimeout
一般默认启用。
编辑配置文件(如 /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/limit.conf):
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=10-20,MinRate=500
RequestReadTimeout body=10,MinRate=500
</IfModule>
含义:
header=10-20:头信息 10 秒内必须接收完,否则最多等 20 秒MinRate=500:最低速率 500 字节/秒最常用、最推荐
yum install epel-release -y
yum install mod_evasive -y
编辑 /etc/httpd/conf.d/mod_evasive.conf:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
</IfModule>
含义:
systemctl restart httpd
适合限制下载、刷接口。
yum install mod_limitipconn -y
<IfModule mod_limitipconn.c>
<Location />
MaxConnPerIP 10
NoIPLimit image/*
</Location>
</IfModule>
含义:
适合全局限流。
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
firewall-cmd --add-rich-rule='rule service name="http" limit value="20/s" accept'
firewall-cmd --runtime-to-permanent
如果你前面有 Nginx:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
✅ Web 层:mod_evasive + mod_limitipconn
✅ 系统层:firewalld / iptables
✅ 前端:Nginx 限流
如果你能告诉我:
我可以给你精准配置。