【发布时间】:2021-05-05 09:19:41
【问题描述】:
我正在使用 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
我做错了什么?
附: Apache 和 Mosquitto 的 SSL 密钥/证书是不同的。 禁用网络服务器时,通过 docker 将 Mosquitto 重定向到端口 443,连接正常。
【问题讨论】:
-
你是在告诉python客户端使用
/mosquitto路径吗? MQTT over websockets 的默认值为/mqtt -
我告诉python客户端
/mosquitto(=my_domain/mosquitto,我也试过ws://my_domain/mosquitto)因为我在Apache的httpd.conf中有ProxyPass作为子目录@987654333 @。在 mosquitto 的配置中,我没有启用 websockets。据我了解,这是在浏览器中使用 Mosquitto。 -
我发现有两个选项我很遗憾无法使用:1. 不使用 TLS 和 Apache 模块进行 MQTT 重定向 2. Apache 中的 TLS 终止
-
在这种情况下,您必须使用 MQTT over Websockets
标签: docker apache mqtt mosquitto