Apache mod_proxy_balancer需配合mod_lbmethod_iphash.so模块并配置lbmethod=iphash,才能实现基于客户端真实IP的哈希分发,确保同一IP始终路由至同一后端节点,无需stickysession或session共享。

Apache mod_proxy_balancer 本身不直接提供“源IP哈希”算法,但可通过启用 mod_lbmethod_byrequests(或更准确地说,mod_lbmethod_iphash)模块并配合 lbmethod=iphash 实现基于客户端IP的会话粘性——即同一IP始终被分发到同一后端节点,天然解决登录态丢失问题。
确认并启用必要模块
IP哈希依赖独立调度模块,不能仅靠 mod_proxy_balancer。需确保以下模块已加载(在 httpd.conf 或 apache2.conf 中):
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_http_module modules/mod_proxy_http.so- LoadModule lbmethod_iphash_module modules/mod_lbmethod_iphash.so(关键:2.4+ 版本中该模块存在且必须启用)
配置 balancer 使用 iphash 算法
在 <Proxy> 块中显式指定 lbmethod=iphash,替代默认的轮询(byrequests):
<Proxy "balancer://mycluster">
BalancerMember http://192.168.1.10:8080 loadfactor=1
BalancerMember http://192.168.1.11:8080 loadfactor=1
BalancerMember http://192.168.1.12:8080 loadfactor=1
ProxySet lbmethod=iphash
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
注意:iphash 对客户端真实IP做哈希,若前端有CDN或反向代理(如Nginx),需确保 X-Forwarded-For 被正确传递,并在 Apache 中用 RemoteIPHeader X-Forwarded-For + RemoteIPInternalProxy 配置可信代理,否则哈希将基于代理IP而非用户真实IP。
无需额外设置 stickysession
与 Cookie 粘性不同,iphash 是四层级策略,完全不依赖应用层 Session ID 或 Cookie:
- 不需配置
stickysession=JSESSIONID - 不需后端在 Cookie 中添加
.route后缀 - 不依赖后端是否支持 session 共享——只要应用无状态或 session 已共享,即可稳定运行
它适合登录态较短、或后端尚未完成 session 共享改造的过渡阶段。
验证与调试建议
启用 balancer-manager 可实时观察请求分布是否符合 IP 哈希特征:
- 访问
/balancer-manager(需配置Require ip限制访问) - 多次从同一IP发起请求,检查各后端的 “Current” 连接数是否稳定(非均匀波动)
- 用不同公网IP测试,确认路由结果互不干扰
若发现流量仍轮询,优先排查:mod_lbmethod_iphash.so 是否真被加载、配置中是否误写为 lbmethod=ip-hash(应为 iphash,无连字符)、以及是否存在其他 ProxySet 覆盖了该设置。

















