使用mod_proxy_balancer的byrequests算法可实现请求级轮询负载均衡,需启用mod_proxy、mod_proxy_balancer和mod_lbmethod_byrequests三个模块,通过ProxySet lbmethod=byrequests指定算法,并正确配置ProxyPass与ProxyPassReverse以确保路径重写和响应头修正。

用 mod_proxy_balancer 的 byrequests 算法实现请求级负载均衡,核心是让每个新请求按顺序、可预测地分发到后端节点,不依赖连接状态或响应时间,适合性能相近的服务器集群。
确保模块已启用
必须加载以下三个模块,缺一不可:
-
mod_proxy:提供基础代理能力 -
mod_proxy_balancer:提供负载均衡管理界面和调度框架 -
mod_lbmethod_byrequests:实现“按请求数”分配逻辑(不是可选,是必需)
在配置文件中确认类似以下启用语句未被注释:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
定义均衡集群并指定算法
使用 <proxy></proxy> 块声明集群,并通过 ProxySet lbmethod=byrequests 明确启用该算法:
BalancerMember http://192.168.1.10:8080 route=node1
BalancerMember http://192.168.1.11:8080 route=node2
ProxySet lbmethod=byrequests
注意:ProxySet 必须写在 之前,且作用于整个集群;它不能写在单个 BalancerMember 行里。
正确配置路径转发
ProxyPass 结尾的 / 直接影响 URL 重写行为:
- 推荐写法:
ProxyPass /app/ balancer://mycluster/→ 把/app/hello转为/hello发往后端 - 错误写法:
ProxyPass /app balancer://mycluster/(末尾无/)→ 把/app/hello变成/app/hello,后端若没挂载在/app上,大概率返回 404
同时务必配对使用 ProxyPassReverse,否则重定向响应中的 Location 头会暴露内部地址。
验证是否真正轮询生效
别靠浏览器刷新肉眼判断——HTTP Keep-Alive 和缓存会干扰。推荐方式:
- 临时关闭长连接:
KeepAlive Off,测试时加请求头Connection: close - 用
curl -H "Connection: close" -sI http://proxy/ | grep X-Backend(前提是后端主动写入标识头) - 启用
mod_status并访问/balancer-manager,观察各节点 “Current Requests” 计数是否逐次递增


















