apache 通过 mod_proxy_wstunnel 直连 websocket 后端并配合 mod_proxy_balancer 健康检查实现集群高可用,而非使用 balancer:// 调度;需启用 mod_proxy、mod_proxy_wstunnel、mod_proxy_balancer 及负载算法模块,配置 proxypass 直连 ws://、header 透传 upgrade 头、proxyset 设置长超时与 keepalive,并用 status=+h 启用被动健康检查。
apache 的 mod_proxy_balancer 本身不直接处理 websocket 协议,但可以与 mod_proxy_wstunnel 协同工作,实现 websocket 连接的集群分发——关键在于**不把 websocket 流量塞进 balancer 组统一调度,而是用 proxypass 直连后端 + 健康检查兜底**。
必须启用的模块组合
缺一不可,否则连接会静默失败或返回 500:
-
mod_proxy:代理基础框架 -
mod_proxy_wstunnel:专用于 WebSocket(≥ Apache 2.4.5) -
mod_proxy_balancer:提供健康检查、状态管理能力(非必须参与转发,但推荐启用) -
mod_lbmethod_byrequests或mod_lbmethod_bybusyness:若需在健康检查中使用特定算法
WebSocket 不走 balancer://,要单独直连
WebSocket 是长连接协议,balancer:// 抽象层不支持 ws/wss 协议封装。正确做法是:
- 用
ProxyPass /ws/ ws://backend1:8080/ws/直连单个后端(不写 balancer://) - 为每个 WebSocket 后端节点配置独立的健康检查,靠
mod_proxy_balancer管理其可用性 - 通过
mod_rewrite或前端路由逻辑实现“软切换”,例如检测 backend1 不可用时重写到 backend2
启用健康检查并标记 WebSocket 节点状态
即使不走 balancer 分发,也要让 Apache 感知后端 WebSocket 服务是否存活:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
<proxy balancer:>
BalancerMember ws://192.168.1.10:8080/ws/ status=+H route=ws1
BalancerMember ws://192.168.1.11:8080/ws/ status=+H route=ws2
ProxySet lbmethod=byrequests
</proxy>
其中 status=+H 启用被动健康检查(依赖实际连接失败触发下线),route 用于后续会话粘性或日志追踪。
关键头与超时设置(防止连接中断)
WebSocket 易被中间设备断连,需显式透传协议头并延长超时:
- 添加
ProxyPreserveHost On,保留原始 Host - 强制透传升级头:
ProxySet keepalive=On timeout=300(建议 ≥300 秒) - 在 ProxyPass 前加:
Header set Connection "Upgrade"和Header set Upgrade "websocket" - 若用 HTTPS 前端,后端 ws → wss 需确保证书有效,或临时加
SSLProxyVerify none(仅测试)










