docker - 通过端口 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,连接正常。
解决方案
要使用 HTTP 反向代理 (Apache) 代理 MQTT 代理,您必须使用 Websocket 的 MQTT(因为 WebSocket 连接是通过 HTTP 引导的)。
原生 MQTT 连接将无法正常工作,因为 Apache 无法理解原生协议格式。
您需要在 Mosquitto 中启用 Websocket 侦听器并告诉客户端进行 Websocket 连接。
您也应该使用/mqtt
not/mosquitto
作为代理的路径,因为这是 WebSocket 连接的默认值
推荐阅读
- python - Python OOP if 语句
- python - Python 3.7 和 visdom 错误:+: 'NoneType' 和 'str' 的操作数类型不受支持
- sql - 将特定行转换为标题,将特定行转换为标题值 SQL Server
- python - 在 Python 中遍历数据框的最佳方法是什么?
- amazon-web-services - 如何使用 nodejs 和 AWS SDK 将对象上传到私有 s3 存储桶?
- excel - 在 office-addin 运行时编辑单元格时 Excel 崩溃
- typescript - 使用 Inversify 和 mocha 和 chai 在 Typescript 中使用依赖注入进行单元测试
- c++ - 在 Windows 上构建 mongo-driver-cxx
- c++ - 类型类的 C++ 对象仅访问一个打印函数
- spring-boot - 如何知道生产 Spring Boot 应用程序中使用的日志级别?