LB和EMQX都开启了PROXY_PROTOCOL,但是客户端无法连接EMQX

EMQX: 5.8.4

入口顺序:客户端 → (8883) LB → (1883)EMQX

发现客户端无法连上EMQX,LB开启了PROXY_PROTOCOL,EMQX的tcp监听1883也开启了PROXY_PROTOCOL。

日志输出也没任何相关的信息

如果emqx的日志上没有报错,我觉得应该是lb配错了,建议对下官网文档一个个看一下

但是我们还有一台5.0.20版本的服务器,入口顺序一样,但是没有开启PROXY_PROTOCOL也能获取到设备真实IP,是后面升级的版本有改动到这个吗?

这个是基础功能,不应该会变。

你那 5.0.20 没开 proxy_protocol 还能看到真实 IP,说明 LB 本身保留了源地址(没做 SNAT、透明转发、或云厂商的源地址透传),不是 EMQX 在没收到 Proxy Protocol 时还能解析出真实 IP。

  1. 先确认 LB 到 EMQX 这一跳到底有没有发 Proxy Protocol 头。HAProxy 后端要显式 send-proxy / send-proxy-v2,NGINX stream 要在转发到 upstream 的 server 里开 proxy_protocol on;。只在 LB 产品页面开了“代理协议”,但后端连接没带头,EMQX 1883 开了 proxy_protocol = true 会直接等header,客户端表现就是连不上。

  2. 确认 TLS 是不是在 LB 终止。

    • LB 8883 终止 TLS,然后转明文 MQTT 到 EMQX 1883:开 listeners.tcp.default.proxy_protocol = true
    • LB 只是 8883 透传 TLS:后端不能打到 EMQX 1883,应该打到 EMQX 8883,并开 listeners.ssl.default.proxy_protocol = true
  3. 在 EMQX 上看监听器实际配置和关闭原因:

emqx ctl listeners

tcp:default / ssl:defaultproxy_protocolshutdown_count,以及 LB 类型和后端配置片段贴出来。现在看更像 LB 透传方式或后端协议选错

好的,谢谢,我们再调一调看看