apache虚拟主机中配置负载均衡需在内定义集群与proxypass规则,启用mod_proxy、mod_proxy_balancer、mod_slotmem_shm等必需模块,设置loadfactor权重、lbmethod算法及健康检查参数,并区分http/https后端转发场景。
在虚拟主机中配置 apache 负载均衡,核心是把 <proxy></proxy> 定义和 proxypass 规则放在 <virtualhost></virtualhost> 块内,并确保模块启用、语法正确、路由逻辑清晰。不推荐全局定义 balancer,而应按业务隔离,便于维护与热更新。
1. 确保必需模块已加载
以下模块缺一不可,否则会报 502 或 balancer-manager 不可用:
- mod_proxy:提供基础代理能力
- mod_proxy_balancer:支持负载均衡集群定义
- mod_proxy_http(或 mod_proxy_ajp):转发 HTTP/AJP 请求
- mod_slotmem_shm:必需!用于共享内存管理,缺失会导致 reload 后状态丢失、manager 页面空白
- mod_lbmethod_byrequests(或其他调度算法模块):指定分发策略
验证命令:apachectl -M | grep -E "(proxy|balancer|slotmem|lbmethod)"。Ubuntu/Debian 可用 a2enmod 启用;CentOS/RHEL 需确认 httpd.conf 中 LoadModule 行未被注释。
2. 在 VirtualHost 中定义负载均衡组
直接在 <virtualhost></virtualhost> 或 <virtualhost></virtualhost> 内写入完整配置,避免跨文件依赖。示例(HTTP 后端):
<virtualhost> ServerName api.example.com <h1>启用 balancer-manager(仅调试用,生产请移除或严格限制访问)</h1> <p><location> SetHandler balancer-manager Require ip 127.0.0.1 192.168.1.0/24 </location></p> <h1>定义后端集群</h1> <p><proxy> BalancerMember <a href="https://www.php.cn/link/77184dfe67580ec306996b09373237ee">https://www.php.cn/link/77184dfe67580ec306996b09373237ee</a> route=node1 loadfactor=100 BalancerMember <a href="https://www.php.cn/link/15935d649bded84cb43d091832c646f7">https://www.php.cn/link/15935d649bded84cb43d091832c646f7</a> route=node2 loadfactor=100 ProxySet lbmethod=byrequests </proxy></p> <h1>转发规则</h1> <p>ProxyPreserveHost On ProxyPass / balancer://api-cluster/ ProxyPassReverse / balancer://api-cluster/</p> <h1>可选:添加健康检查(需额外配置 ProxyHCExpr)</h1> <h1>ProxySet retry=60 timeout=5</h1> <p></p></virtualhost>
关键点:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
route=xxx用于会话粘滞(配合stickysession=ROUTEID或应用层 Cookie) -
loadfactor控制权重,如设为 200 和 100,则流量比约为 2:1 -
ProxyPreserveHost On必须开启,否则后端收到的 Host 头是 IP,可能导致重定向异常
3. HTTPS 场景下的后端转发区分
客户端到 Apache 是 HTTPS,Apache 到后端可选 HTTP 或 HTTPS —— 二者配置差异明显:
-
SSL 终结 + 后端 HTTP(常见内网方案):无需
SSLProxyEngine on,BalancerMember用http://地址,后端需识别X-Forwarded-Proto: https -
端到端 HTTPS(推荐跨网段/混合云):必须加
SSLProxyEngine on,所有BalancerMember改为https://,并配置证书信任(如SSLProxyCACertificateFile),禁用校验仅限测试环境
HTTPS 虚拟主机示例片段:
<virtualhost> ServerName app.example.com SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem <p>SSLProxyEngine on</p> <h1>若后端用自签名证书(仅测试):</h1> <h1>SSLProxyVerify none</h1> <h1>SSLProxyCheckPeerCN off</h1> <p><proxy> BalancerMember <a href="https://www.php.cn/link/20086683a16f0f9ff5ee662afa9fbfbf">https://www.php.cn/link/20086683a16f0f9ff5ee662afa9fbfbf</a> route=app1 BalancerMember <a href="https://www.php.cn/link/69d38f86002637277a7fd3e84cbf6fe8">https://www.php.cn/link/69d38f86002637277a7fd3e84cbf6fe8</a> route=app2 </proxy></p> <p>ProxyPass / balancer://app-https/ ProxyPassReverse / balancer://app-https/ </p></virtualhost>
4. 生产就绪建议
不是配完就能上线,还需注意这些细节:
- 防火墙放行 Apache 到后端端口(如 8080、8443),不只是 80/443
- 后端服务暴露轻量
/health接口,配合hcexpr实现自动故障剔除 - 避免把 balancer 配置硬编码在主
VirtualHost里;可改用Include /etc/apache2/sites-enabled/balancers/*.conf分离管理 - 每次修改后执行
apachectl graceful(非 restart),保证连接平滑过渡










