温馨提示×

apache在centos如何限流

小樊
36
2026-09-21 06:06:42
栏目: 智能运维

在 CentOS 上,Apache 限流通常有几种常见做法,取决于你想“限什么”和“限到什么程度”。下面按使用频率从高到低给你讲清楚。


一、使用 mod_ratelimit(Apache 自带,最推荐)

1. 原理

限制单个连接的下载速度(不是请求数)。

2. 安装与启用

CentOS 7/8 默认已带该模块:

httpd -M | grep ratelimit

如果没有,安装:

yum install mod_ratelimit

启用模块(通常已启用):

a2enmod ratelimit   # CentOS 一般不用这命令

3. 配置示例

编辑配置文件(如 /etc/httpd/conf.d/ratelimit.conf):

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

说明:

  • rate-limit 100 表示 100 KB/s
  • 可针对目录、虚拟主机、Location 使用

示例:限制下载目录

<Directory "/var/www/html/download">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 200
</Directory>

重启 Apache:

systemctl restart httpd

二、限制并发连接数(mod_reqtimeout / MaxClients)

1. 限制请求超时

RequestReadTimeout header=10-20,MinRate=500
RequestReadTimeout body=30,MinRate=1000

2. 限制最大并发

httpd.conf 中:

<IfModule mpm_prefork_module>
    MaxClients          150
    ServerLimit         150
</IfModule>

三、限制请求频率(每秒请求数)—— mod_security / fail2ban

Apache 本身不擅长按“请求数/秒”限流,通常用:

方案 A:mod_security

yum install mod_security

示例规则(每秒超过 10 个请求封 IP):

SecRuleEngine On
SecAction "id:1000,phase:1,pass,nolog,setvar:ip.requests=+1"

(实际规则较复杂,一般配合 OWASP 规则集)


方案 B:fail2ban(最实用)

yum install fail2ban

示例过滤 Apache 频繁访问:

[apache-rate-limit]
enabled = true
filter = apache-access
logpath = /var/log/httpd/access_log
maxretry = 100
findtime = 60
bantime = 600

四、在前面加 Nginx / 防火墙(生产最推荐)

如果你前面有 Nginx

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location / {
        limit_req zone=one burst=20 nodelay;
    }
}

或在 iptables / firewalld 层做限制。


五、总结建议

需求 推荐方案
限制下载速度 mod_ratelimit
限制并发 MaxClients
限制请求频率 fail2ban / Nginx
防刷接口 mod_security

如果你能告诉我:

  • CentOS 版本
  • Apache 版本
  • 想限 速度 / 并发 / 请求数
  • 是否在前端有 Nginx

我可以直接给你可复制的配置

0