首页 > 解决方案 > 通过端口 443 和 apache 访问 mosquitto

问题描述

我正在使用 TLS 在名为“mosquitto”的 docker 容器中运行 MQTT Mosquitto 服务器,监听端口 8883。

在同一网络中的另一个 docker 容器中,我正在运行一个 Apache 网络服务器,其网页位于 my_domain(端口 443)。

Apache 应该将所有请求转发my_domain/mosquitto到 Mosquitto 代理。使用 my_domain/mosquitto。因此我添加

  ProxyPreserveHost On
  ProxyPass /mosquitto ws://mosquitto:8883
  ProxyPassReverse /mosquitto ws://mosquitto:8883

到我的httpd.conf,它将 https-browser-calls 重定向my_domain/mosquitto到 mosquitto。这当然会导致 Mosquitto 出现 OpenSSL 错误。

但是使用 MQTT 客户端(python)会导致Name or service not known

我做错了什么?

PS:Apache 和 Mosquitto 的 SSL 密钥/证书是不同的。禁用网络服务器时,通过 docker 将 Mosquitto 重定向到端口 443,连接正常。

标签: dockerapachemqttmosquitto

解决方案


要使用 HTTP 反向代理 (Apache) 代理 MQTT 代理,您必须使用 Websocket 的 MQTT(因为 WebSocket 连接是通过 HTTP 引导的)。

原生 MQTT 连接将无法正常工作,因为 Apache 无法理解原生协议格式。

您需要在 Mosquitto 中启用 Websocket 侦听器并告诉客户端进行 Websocket 连接。

您也应该使用/mqttnot/mosquitto作为代理的路径,因为这是 WebSocket 连接的默认值


推荐阅读