apache负载均衡需四步:启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests、slotmem_shm模块;定义balancer://myapp集群并设balancermember;配置proxypass/proxypassreverse转发/api/路径;启用/balancer-manager管理界面。
apache 用 mod_proxy_balancer 配置基础集群,不是加几行就自动生效,而是要模块到位、结构写对、路径连通三者齐备。核心动作就四步:启用必要模块、定义 balancer 集群、配置代理转发、开放管理界面。
确认并启用必需模块
只开 mod_proxy 只能做单点反向代理,负载均衡必须组合启用:
-
mod_proxy:基础代理能力 -
mod_proxy_http:支持 HTTP 后端通信(后端是 Tomcat、Spring Boot 等 HTTP 服务时必选) -
mod_proxy_balancer:提供集群管理框架 -
mod_lbmethod_byrequests(或bybusyness):指定调度算法,轮询最常用 -
mod_slotmem_shm:提供共享内存,缺失会导致/balancer-manager无法运行
Ubuntu/Debian 下执行:a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm status
RHEL/CentOS 检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行未被注释。验证命令:httpd -M | grep -E 'proxy|balancer|slotmem|lbmethod'
定义 balancer 集群
在主配置(如 httpd.conf 或站点配置中)添加 <proxy></proxy> 块,用 balancer:// 协议命名集群:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 loadfactor=2
BalancerMember http://192.168.1.11:8080 loadfactor=1
ProxySet lbmethod=byrequests
</proxy>
说明:
- 每个
BalancerMember写明后端地址和端口 -
loadfactor是相对权重,比如 2:1 表示第一台接收约 2/3 的请求 -
ProxySet lbmethod=byrequests必须写在之前,作用于整个集群 - 若需热备节点,加
status=+H;禁用节点用status=+D
配置请求转发与响应修正
仅定义集群不转发流量,还需 ProxyPass 和 ProxyPassReverse 绑定路径:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
ProxyPass "/api/" "balancer://myapp/" ProxyPassReverse "/api/" "balancer://myapp/"
注意:
-
ProxyPass "/api/" "balancer://myapp/"表示把/api/hello改写为/hello发往后端 -
ProxyPassReverse修正后端返回的Location、Set-Cookie等响应头,避免重定向跳转出错 - 如需全局代理,可写
ProxyPass "/" "balancer://myapp/",但建议前置路径避免冲突
启用 /balancer-manager 管理界面
这不是集群本身,而是查看状态、临时启停节点、切换算法的 Web 控制台:
<location>
SetHandler balancer-manager
Require local
# 生产环境请替换为具体 IP,例如:Require ip 192.168.1.100
</location>
重启 Apache 后访问 http://your-server/balancer-manager,即可看到各节点的当前连接数、权重、状态(OK / ERR / H)及手动操作入口。










