Apache高可用目标是确保动态请求稳定转发与响应,需分三层:后端服务冗余(多活PHP-FPM等)、代理层启用mod_proxy_balancer实现健康检查与负载均衡、接入层用Keepalived配置VIP漂移实现双机热备。

Apache 本身不直接执行 PHP、Python 或 Java 动态逻辑,它的高可用目标是:让动态请求始终能被转发、响应,不因单点故障或流量突增而中断。关键不是“Apache 处理动态请求”,而是“Apache 稳定调度动态请求”。配置需分三层推进——后端服务冗余、代理层负载均衡、接入层 VIP 漂移。
后端动态服务必须独立且多活
别把 PHP-FPM、Gunicorn 或 Tomcat 和 Apache 装在同一台机器上跑。高频请求下,单实例崩溃即全站不可用。
- 至少部署两台及以上应用服务器(如 192.168.10.20:9000、192.168.10.21:9000),各自监听独立端口,代码与配置完全一致
- 每个后端提供真实健康接口(如 /health 返回 200)或确保 TCP 端口可连通,这是健康检查的基础
- 会话状态不能依赖本地文件(如 session.save_path 指向 NFS),改用 Redis 或数据库集中存储,避免节点切换时登录丢失
Apache 启用 mod_proxy_balancer 实现智能转发
仅开 mod_proxy 和 mod_proxy_http 不够,mod_proxy_balancer 是负载均衡的核心模块,必须启用,否则 BalancerMember 指令无效。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- Debian/Ubuntu 执行:
a2enmod proxy proxy_http proxy_balancer;CentOS/RHEL 编辑/etc/httpd/conf.modules.d/00-proxy.conf,取消三行 LoadModule 的注释 - 在 VirtualHost 中定义集群(名称如
balancer://phpapp必须全局唯一):
<Proxy balancer://phpapp>
BalancerMember http://192.168.10.20:9000 route=node1 loadfactor=5 timeout=10 retry=30 ping=5
BalancerMember http://192.168.10.21:9000 route=node2 loadfactor=5 timeout=10 retry=30 ping=5
ProxySet lbmethod=byrequests
</Proxy>
-
ping=5表示每 5 秒发 HEAD 探针;retry=30指故障后 30 秒内不尝试恢复;route值要和后端应用的会话粘性配置匹配(如 Tomcat 的jvmRoute="node1") - 转发规则必须带结尾斜杠:
ProxyPass / balancer://phpapp/和ProxyPassReverse / balancer://phpapp/,否则路径重写错乱导致 404
接入层用 Keepalived 实现双机热备
只有一台 Apache 当代理,它挂了整个入口就断了。必须为代理层加虚拟 IP(VIP),让客户端永远访问同一个地址。
- 在两台 Apache 服务器上安装 Keepalived(
yum install keepalived或apt install keepalived) - 主节点配置
priority 100,备节点配priority 90,共用一个virtual_router_id和 VIP(如 192.168.1.100) - Keepalived 通过 VRRP 协议秒级检测主节点存活,一旦失联,VIP 自动漂移到备机,用户无感知
- 建议在两台 Apache 上都启用
mod_status并开放内网监控,配合脚本做主动健康上报,比单纯 ping 更可靠
高频场景下的关键调优点
默认配置扛不住持续高并发,需针对性调整:
- Apache 工作模式选 Prefork(非线程型),更稳定兼容 PHP 模块;适当调大
MaxRequestWorkers(原 MaxClients),并同步增大ServerLimit - 后端连接池要足够:PHP-FPM 配置
pm.max_children至少 50+,并启用pm.status_path方便监控 - 禁用不必要的 Apache 模块(如 autoindex、userdir),减少内存占用和潜在攻击面
- 开启
mod_deflate压缩响应体,降低带宽压力;对 JSON/API 接口尤其有效

















