温馨提示×

centos apache2怎样限流

小樊
51
2026-09-24 05:54:14
栏目: 智能运维

在 CentOS 上,如果你说的是 Apache(httpd) 的限流(不是 Ubuntu 的 apache2 包名,CentOS 叫 httpd),常见做法有几种,下面从最常用到进阶给你讲。


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

1. 确认模块已启用

httpd -M | grep ratelimit

应该有:

ratelimit_module (shared)

如果没有:

yum install mod_ratelimit

(CentOS 7/8 通常已包含)

2. 配置限流(按连接限速)

编辑配置文件(如 /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
  • 只对响应输出限速(下载)

重启:

systemctl restart httpd

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

防止慢速攻击:

<IfModule reqtimeout_module>
    RequestReadTimeout header=10-20,MinRate=500
    RequestReadTimeout body=10-20,MinRate=500
</IfModule>

含义:

  • 10 秒内至少 500 字节/秒
  • 否则断开连接

三、限制并发连接数(mod_evasive / mod_qos)

方案 1:mod_evasive(防 CC 攻击)

yum install mod_evasive

配置 /etc/httpd/conf.d/mod_evasive.conf:

DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60

含义:

  • 1 秒内同一页面访问超过 10 次 → 封 60 秒

方案 2:mod_qos(更专业)

yum install mod_qos

示例(限制并发):

QS_LocRequestLimitMatch * 50
QS_EventLimitRequest 100

四、Nginx 前端的限流(如果你有反代)

如果你用 Nginx + Apache:

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

server {
    location / {
        limit_req zone=one burst=20 nodelay;
        proxy_pass http://127.0.0.1:8080;
    }
}

五、iptables 层限流(不推荐但可用)

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/s -j ACCEPT

六、选型建议

需求 推荐
下载限速 mod_ratelimit
防慢速攻击 mod_reqtimeout
防 CC / 刷接口 mod_evasive
高并发控制 mod_qos
整体入口限流 Nginx

如果你能说清楚:

  • CentOS 版本(7 / 8 / Stream)
  • Apache 版本
  • 想限 下载速度 / 请求频率 / 并发数

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

0 踩