我想要做的是将 eclipse-mosquitto 作为 MQTT 代理运行在带有 SSL 的 Apache 反向代理后面。
我编写了以下 docker-compose 文件:
version: "3.9"
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
ports:
- "9100:9100"
restart: always
volumes:
- mosquitto_data:/mosquitto/data
- mosquitto_log:/mosquitto/log
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf
volumes:
mosquitto_data: {}
mosquitto_log: {}
以及以下
mosquitto.conf
:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
port 1883
listener 9108
protocol websockets
现在,我想添加 Apache 反向代理以将 SSL 添加到我的代理。我通常使用子域来保持我在服务器上运行的服务分开。
这是我写的:
<VirtualHost *:443>
ServerName mosquitto.example.com
# SSL settings (mostly generated by Webmin)
SSLEngine on
SSLCertificateFile /home/example/ssl.cert
SSLCertificateKeyFile /home/example/ssl.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCACertificateFile /home/example/ssl.ca
# Proxy stuff
ProxyPass / ws://localhost:9100/
ProxyPassReverse / ws://localhost:9100/
</VirtualHost>
现在,在客户端上,
mosquitto_pub
给了我这个:
.\mosquitto_pub -h mosquitto.example.com -p 443 -u admin -p admin1234 -t 'test/topic' -m 'helloWorld'
Unable to connect (This feature is not supported.).
凭证是使用
mosquitto_passwd
创建的。
我做错了什么?
奖励问题: 我怎样才能做到这样我就不需要
-p 443
?
mosquitto_pub
和mosquitto_sub
命令不支持通过Websockets使用MQTT连接到代理。
您可以使用mqtt包附带的基于nodejs的工具