繁体   English   中英

如何通过服务器隧道浏览器端 mqtt?

[英]How to tunnel browser-side mqtt through the server?

浏览器使用它来连接到 mosquitto(websockets 模式):

new Paho.MQTT.Client('localhost', 9001, '');

据我了解,这是从浏览器到代理的直接连接。 当浏览器在另一台机器上时,它不会在正常设置中工作。

在正常设置中,nodejs 和代理在同一台机器上。 如何通过 nodejs 路由它,以便 nodejs 可以将连接转发到localhost:9001 而且我不想编写大量代码来重新打包消息和重新实现不同的订阅 API。

localhost是一种特殊情况的主机名,指的是运行某些代码的机器。

假设您要连接的代理在托管网页的同一台机器上,您可以使用location变量来获取您需要的信息。

var client = new Paho.MQTT.Client(location.hostname, 9001, '');

假设您正在代理 webapp,那么 websockets 也可以在同一端口上进行代理,最终结果为:

var client = new Paho.MQTT.Client(location.hostname, parseInt(location.port), '');

还要代理 mqtt(使用 nginx):

location /mqtt {
    proxy_pass          http://127.0.0.1:9001/;
    proxy_http_version  1.1;
    proxy_set_header    Upgrade $http_upgrade;
    proxy_set_header    Connection "upgrade";
}

您可以打开另一个端口,然后设置一个 SSH 隧道(即 SSH 隧道 MQTT 数据)。 这样做的好处是它允许您轻松地将此端口公开或不公开到互联网,并且它是安全的(加密的)。

本教程介绍了如何执行此操作。 显然,由于 MQTT 数据通过 SSH(通过 SSH 隧道)传输,因此它是 100% 加密的,因此是安全的。 当然,您也可以使用 RSA 密钥(确实使 SSH 连接非常安全),然后编写一个简单的 BASH 脚本来自动化所有这个过程,我猜。 教程链接: SSH 隧道 MQTT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM