apache的mod_proxy本身不处理并发控制或防ddos,需前置叠加mod_qos限连接数、mod_evasive限请求频次,并配合内核调优与http方法限制实现综合防护。
apache 的 mod_proxy 本身不处理并发控制或防 ddos,它只负责转发请求。真正限制高并发 ip 访问、防止资源耗尽型攻击(如 slowloris、rudy 或连接洪泛),必须在代理前叠加连接级限流和请求频次防护。核心思路是:不让恶意连接建立成功,或建了也很快被踢掉。
用 mod_qos 精准限制单 IP 并发连接数
mod_qos 是生产环境推荐方案,它能统计真实 TCP 连接状态(ESTABLISHED / KEEPALIVE),不是只看 HTTP 请求次数,对慢速攻击特别有效。
确保已安装并启用 mod_qos(Ubuntu 上可 sudo a2enmod qos):
<ifmodule qos_module> # 全局总连接上限(防所有IP挤爆) QS_SrvMaxConn 200 # 每个 IP 最多维持 10 个活跃连接(含 Keep-Alive) QS_SrvMaxConnPerIP 10 # 对特定网段放宽(如内网运维机) QS_SrvMaxConnPerIP 50 "192.168.10.0/24" # 对已知扫描源直接拒绝(支持 CIDR) QS_SrvMaxConnPerIP 0 "203.0.113.0/24" </ifmodule>
这个配置会实时拦截第 11 个来自同一 IP 的新连接请求,返回 503 Service Unavailable,后端服务完全无感知。
配合 mod_evasive 做请求频次兜底防护
mod_evasive 补充防护高频短连接(如 HTTP Flood),适合保护 /login、/api/submit 等易被刷的路径:
<ifmodule mod_evasive20.c> DOSPageCount 3 # 同一页面 1 秒内最多 3 次 DOSSiteCount 50 # 全站 1 秒内最多 50 次 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 600 # 封禁 10 分钟 DOSLogDir "/var/log/apache2/evasive" DOSWhitelist 127.0.0.1 # 白名单本地回环 DOSWhitelist 192.168.1.0/24 # 内网段不封 </ifmodule>
⚠️ 注意:不要仅靠 mod_evasive 防连接耗尽——它不识别空闲长连接,一个 IP 开 100 个 Keep-Alive,它可能完全不报警。
在 Proxy 路径上叠加限流逻辑(按需)
如果只想保护某段代理接口(比如 /api/),可结合 <location></location> 和环境变量做条件触发:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<location>
# 先标记该路径下的请求
SetEnvIf Request_URI "^/api/" api_route
# 用 mod_qos 为该路径单独设限(需 mod_qos 支持 env 条件)
<ifmodule qos_module>
QS_SrvMaxConnPerIP 5 api_route
</ifmodule>
ProxyPass "http://backend:8080/api/"
ProxyPassReverse "http://backend:8080/api/"
</location>
这样 /api/ 下的连接会被更严格限制,而静态资源或其他路径不受影响。
必须同步做的底层加固
-
调优内核参数,防 SYN Flood:
echo 'net.ipv4.tcp_syncookies = 1' | sudo tee -a /etc/sysctl.conf echo 'net.ipv4.tcp_synack_retries = 3' | sudo tee -a /etc/sysctl.conf sudo sysctl -p
-
关闭冗余 Keep-Alive 或缩短超时:
KeepAlive On MaxKeepAliveRequests 50 KeepAliveTimeout 3
-
禁用非必要 HTTP 方法,减少攻击面:
<location><limitexcept get post head> Require all denied </limitexcept></location>
不复杂但容易忽略。










