emqx多容器集群用haproxy配置websocket负载均衡,无效。单个emqx容器跑在docker中是正常的websocket通信

环境信息

  • EMQX 版本:4.4.4
  • 操作系统及版本:centos7
  • 其他

问题描述

我在本地开发机上跑单个emqx容器,用mqtt.js库进行websocket是正常的,ws://127.0.0.1:8083/mqtt
但是在云主机中,haproxy在多个emqx容器中做负载均衡,1883的是正常,8083的websocket行不通,想知道怎么配置是哪里不对呢?

配置文件及日志

下面是haproxy的配置,反复调试都行不通,可以确定是haproxy的配置问题
frontend emqx_ws
mode http
option httplog
bind *:8083
acl host_ws hdr_beg(Host) -i ws.
acl hdr_connection_upgrade hdr(Connection) -i upgrade
acl hdr_upgrade_websocket hdr(Upgrade) -i websocket
use_backend emqx_ws_back if hdr_connection_upgrade hdr_upgrade_websocket
default_backend emqx_ws_back

backend emqx_ws_back
mode http
balance roundrobin
acl hdr_connection_upgrade hdr(Connection) -i upgrade
acl hdr_upgrade_websocket hdr(Upgrade) -i websocket
acl hdr_websocket_key hdr_cnt(Sec-WebSocket-Key) eq 1
acl hdr_websocket_version hdr_cnt(Sec-WebSocket-Version) eq 1
server emqx-1 node1.emqx.io:8083 check-send-proxy send-proxy-v2
server emqx-2 node2.emqx.io:8083 check-send-proxy send-proxy-v2

以下是haproxy打印的日志:
emqx_ws emqx_ws_back/emqx-1 0/0/0/0/0 400 58 - - ---- 2/1/0/0/0 0/0 "GET /mqtt HTTP/1.1

已解决

怎么解决的呢,我也遇到了这个问题,直连没有任何问题,使用haproxy负载均衡后就无法使用