基于路径的负载分发需用ProxyPass将不同URL路径绑定到对应balancer组,如/api/→api_cluster、/static/→static_cluster,并启用mod_proxy等必要模块,配置BalancerMember及ProxyPassReverse确保路由与响应头正确。

在 httpd.conf 中配置基于路径的负载分发,核心是用 ProxyPass 指令绑定特定 URL 路径到某个 balancer 组,而不是把整个根路径(/)都代理过去。这样可以实现不同路径走不同后端集群,比如 /api/ 转给应用服务器组,/static/ 转给静态资源服务器组。
确认必要模块已启用
确保以下模块在 httpd.conf 中已加载(取消注释):
mod_proxy.somod_proxy_balancer.somod_proxy_http.so-
mod_slotmem_shm.so(balancer 管理器必需,否则会报错) -
mod_lbmethod_byrequests.so(如需使用 byrequests 算法)
检查方式:运行 apachectl -M | grep proxy,应看到对应模块 listed。
定义多个 balancer 组并指定成员
在 httpd.conf 的全局区或 <virtualhost></virtualhost> 内添加如下结构:
<Proxy balancer://api_cluster>
BalancerMember http://192.168.1.10:8080 route=api1 loadfactor=3
BalancerMember http://192.168.1.11:8080 route=api2 loadfactor=2
ProxySet lbmethod=byrequests stickysession=JSESSIONID
</Proxy>
<Proxy balancer://static_cluster>
BalancerMember http://192.168.1.20:80 route=static1
BalancerMember http://192.168.1.21:80 route=static2
ProxySet lbmethod=bytraffic
</Proxy>
注意:route 参数用于 session 粘滞,stickysession 需与后端应用实际使用的会话 Cookie 名一致(如 JSESSIONID 或 PHPSESSID)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
按路径设置 ProxyPass 规则
在同一 <virtualhost></virtualhost> 块中,按匹配顺序写明路径规则(顺序重要!):
-
ProxyPass /api/ balancer://api_cluster/api/(末尾斜杠必须一致) ProxyPass /static/ balancer://static_cluster/static/ProxyPass /assets/ balancer://static_cluster/assets/-
ProxyPass / balancer://default_cluster/(兜底规则,放最后)
配套加上 ProxyPassReverse,确保后端返回的重定向头和 Cookie 路径被正确改写:
ProxyPassReverse /api/ balancer://api_cluster/api/ProxyPassReverse /static/ balancer://static_cluster/static/
验证与调试建议
配置完成后务必执行:
-
apachectl -t检查语法是否正确 -
apachectl graceful平滑重启 - 访问
http://your-server/balancer-manager(需提前配好权限)查看各成员状态和请求分发情况 - 用
curl -v http://your-server/api/test和curl -v http://your-server/static/logo.png分别测试路径路由是否生效
路径匹配区分大小写,且不支持正则——如需更灵活的路径判断,可配合 mod_rewrite 先重写再代理。

















