Apache mod_proxy_balancer 本身不处理多域名路由,需先按Host头将不同域名请求分流至同一共享balancer集群,再由其统一负载均衡;关键步骤为启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、slotmem_shm模块,全局定义balancer://shared-backend集群,多个VirtualHost复用该集群并配置ProxyPreserveHost和ProxyPass。
apache mod_proxy_balancer 本身不直接处理“多域名”逻辑,它只负责在已定义的 balancer 集群内分发请求。要实现多域名统一分发入口(例如 app1.example.com、app2.example.com、api.example.com 全部共用同一组后端服务器),关键在于:把域名路由和负载均衡解耦——先按 host 头分流到同一集群,再由 balancer 统一调度。
这需要三步协同:启用必要模块 → 定义全局或共享 balancer 集群 → 在多个 <VirtualHost> 中复用该集群并做路径/头适配。
✅ 启用必需模块(一次配置,全局生效)
确保以下模块已加载(检查 httpd -M 或 a2enmod):
-
mod_proxy -
mod_proxy_http(后端是 HTTP/HTTPS 服务时必需) -
mod_proxy_balancer -
mod_lbmethod_byrequests(或其他算法,如bybusyness) -
mod_slotmem_shm(必须!否则集群状态无法共享,balancer-manager失效)
Ubuntu/Debian 示例:
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm sudo systemctl restart apache2
✅ 定义一个共享的 balancer 集群(推荐放主配置中)
集群定义只需一份,所有虚拟主机可复用。例如在 httpd.conf 或 /etc/apache2/mods-enabled/proxy.conf 中添加:
<Proxy "balancer://shared-backend">
BalancerMember http://192.168.1.10:8080 loadfactor=3 ping=5 retry=60
BalancerMember http://192.168.1.11:8080 loadfactor=2 ping=5 retry=60
BalancerMember http://192.168.1.12:8080 status=+H # 热备节点
ProxySet lbmethod=bybusyness
ProxySet timeout=10 keepalive=On
</Proxy>⚠️ 注意:
<Proxy>块不能写在<VirtualHost>内部(否则作用域受限);必须放在全局上下文(如主配置或mods-enabled/的独立 conf 文件中),才能被多个虚拟主机共同引用。
CPA Update - Secure CLI Proxy API Maintenance下载安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
✅ 在多个 VirtualHost 中复用集群,并适配域名语义
每个域名对应一个 <VirtualHost>,都指向同一个 balancer://shared-backend,但需单独处理:
-
ProxyPreserveHost On:让后端收到原始Host头,便于日志识别或应用路由 -
ProxyPass/ProxyPassReverse:统一转发根路径(或按需加前缀) - 可选:
RequestHeader set X-Forwarded-Host %{HTTP_HOST}e补充透传
示例配置(三个域名共用同一后端集群):
<VirtualHost *:80>
ServerName app1.example.com
ProxyPreserveHost On
ProxyPass / balancer://shared-backend/
ProxyPassReverse / balancer://shared-backend/
</VirtualHost>
<VirtualHost *:80>
ServerName app2.example.com
ProxyPreserveHost On
ProxyPass / balancer://shared-backend/
ProxyPassReverse / balancer://shared-backend/
</VirtualHost>
<VirtualHost *:80>
ServerName api.example.com
ProxyPreserveHost On
# 可额外加路径重写或头控制
RequestHeader set X-Api-Version "v1"
ProxyPass / balancer://shared-backend/
ProxyPassReverse / balancer://shared-backend/
</VirtualHost>✅ 这样,三个域名的全部流量都进入同一个负载均衡池,由
bybusyness算法动态分发到健康后端,同时后端能通过Host头区分来源,实现逻辑隔离。
✅ 补充建议(提升可用性)
-
启用健康检查:为每个
BalancerMember加hcmethod=GET hcuri=/health failonstatus=503 -
限制管理界面访问:若开启
/balancer-manager,务必用Require ip限定可信 IP -
HTTPS 场景:在
*:443虚拟主机中同样复用该集群,只需补充SSLEngine on和证书配置 -
避免正向代理风险:确认全局设置了
ProxyRequests Off
不复杂但容易忽略。


















