Apache实现基于IP哈希的分流,核心是启用mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_lbmethod_byrequests和mod_slotmem_shm模块,在块中配置ProxySet lbmethod=byrequests,并依赖其在无cookie时自动回退至客户端IP哈希分发,配合stickysession增强一致性。要让 Apache 实现基于 IP 哈希的分流,核心是启用对应模块、正确配置 `lbmethod` 并确保哈希行为稳定生效。这不是简单加个参数就能跑通,关键在模块依赖和隐式/显式粘性逻辑的配合。
必须启用的模块
缺一不可,否则 ip 哈希无法工作:
- mod_proxy:基础代理能力
- mod_proxy_http(或 mod_proxy_ajp):后端通信协议支持
- mod_proxy_balancer:集群调度框架
- mod_lbmethod_byrequests:IP 哈希实际由它提供(不是 mod_proxy_balancer 自带)
- mod_slotmem_shm:共享内存管理,缺失会导致 balancer-manager 失效,也影响哈希状态一致性
配置 IP 哈希的核心写法
在 <proxy></proxy> 块中使用 byrequests 算法,并明确启用 IP 作为粘性依据:
<proxy>
BalancerMember http://192.168.1.10:8080
BalancerMember http://192.168.1.11:8080
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID|JSESSIONID
</proxy>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
lbmethod=byrequests是 Apache 中实现“类 IP 哈希”的默认方式——当未设置会话 cookie 时,它会自动 fallback 到客户端 IP 哈希分发 -
stickysession是可选但推荐项,用于增强一致性;若后端应用本身返回ROUTEID或JSESSIONIDcookie,Apache 会优先按 cookie 路由,避免因 NAT 或代理导致 IP 变化而打乱绑定 - 不建议只依赖 IP 哈希做强会话保持,尤其在有 CDN、NAT 网关或移动网络环境下,源 IP 可能不唯一或频繁变化
验证与注意事项
配置完成后需确认两点:
- 用
httpd -M | grep -E 'proxy|lbmethod|slotmem'检查模块是否已加载 - 访问
/balancer-manager(需在 Location 中放行)查看各节点的请求计数,用不同公网 IP 访问多次,观察是否同一 IP 始终命中同一后端 - 注意:节点增减会破坏哈希分布,大量客户端会话重新分配;如需平滑扩缩容,应考虑一致性哈希方案(Apache 原生不支持,需 APISIX 或 Nginx Plus 等替代)









