温馨提示×

centos apache如何限流

小樊
48
2026-09-11 21:17:10
栏目: 智能运维

CentOS + Apache 环境下,实现“限流”常见有几种方式,取决于你想限的是什么:

  • 限制并发连接数
  • 限制请求速率(QPS)
  • 限制带宽
  • 限制单个 IP

下面按常用方案说明。


一、使用 mod_reqtimeout(限制请求速度)

适合防止慢速攻击、限制请求建立速度。

1. 确认模块

httpd -M | grep reqtimeout

2. 配置(httpd.conf 或 conf.d/*.conf)

<IfModule mod_reqtimeout.c>
    RequestReadTimeout header=10-20,MinRate=500
    RequestReadTimeout body=10,MinRate=500
</IfModule>

含义:

  • header:10 秒内至少 500 字节/s
  • body:请求体速率限制

重启:

systemctl restart httpd

二、使用 mod_evasive(防 CC / 限制单 IP 请求频率)✅ 最常用

1. 安装

yum install epel-release -y
yum install mod_evasive -y

2. 配置

vi /etc/httpd/conf.d/mod_evasive.conf

示例:

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

含义:

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

重启:

systemctl restart httpd

✅ 适合 防刷接口、防 CC


三、使用 mod_qos(精细限流,推荐)

1. 安装

yum install mod_qos -y

2. 配置示例

<IfModule mod_qos.c>
    QS_LocRequestLimitMatch "^/api/" 5
    QS_CondLocRequestLimitMatch "IP" "^/api/" 2
</IfModule>

含义:

  • /api/ 每秒最多 5 次
  • 单 IP 每秒最多 2 次

重启:

systemctl restart httpd

✅ 适合 API 限流


四、限制并发连接(mod_status + MaxClients)

httpd.conf

<IfModule mpm_prefork_module>
    StartServers 5
    MinSpareServers 5
    MaxSpareServers 10
    MaxClients 150
    MaxRequestsPerChild 3000
</IfModule>

或限制单 IP:

<Directory "/var/www/html">
    Order Allow,Deny
    Allow from all
</Directory>

五、限制带宽(mod_ratelimit)

启用模块

yum install mod_ratelimit -y

配置

<IfModule mod_ratelimit.c>
    <Location "/download">
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 100
    </Location>
</IfModule>

含义:

  • /download 限速 100 KB/s

六、推荐组合方案

场景 推荐
防 CC / 刷接口 mod_evasive
API 限流 mod_qos
下载限速 mod_ratelimit
慢速攻击 mod_reqtimeout

七、检查是否生效

apachectl configtest
systemctl status httpd

如果你能说明:

  • CentOS 版本(6/7/8)
  • Apache 版本
  • 限流对象(API / 网站 / 下载)

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

0