【问题标题】:Can a webapp connect to mosquitto?webapp可以连接到mosquitto吗?
【发布时间】:2022-06-23 23:10:04
【问题描述】:

我有一个 mosquitto_sub 在 serverA 的后台运行,假设主题为“TEST”,端口为 1883。 我跟着this 在ServerB 上使用nginx 作为mosquitto 的流代理。

使用 mosquitto_pub 测试向 ServerB 发送消息的设置,消息在 serverA 上被正确接收并显示。

现在我希望在 serverC 上运行的 webapp 可以接收我使用 websocket 发送的 mqtt 消息,据我了解,nginx 设置正是为此目的而进行的,因为浏览器不能直接使用 mqtt 协议。

我做了两个测试:

  • 将 websocket 指向 ServerB 流 (wss://serverB:1883)
  • 使用以下配置将 websocket 指向 nginx 反向代理:

.

...
server {
    listen 443 ssl;
    ...

    location /webapp/websocket {
            proxy_set_header HOST $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass_request_headers on;
            proxy_pass http://serverB:1883/;
            proxy_http_version 1.0;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
            proxy_read_timeout 1800s;
    }

}

这两个 websocket 都不起作用,出现错误 502 Bad Gateway。 我的问题是,我理解错了吗?可以做到吗? 是否因为必须对 webapp 进行编程以指定要收听的主题而显示错误 502?

【问题讨论】:

    标签: nginx web-applications mqtt mosquitto


    【解决方案1】:

    Mosquitto 代理支持基于 WebSockets 的 MQTT,但它必须位于与基于 TCP 的本地 MQTT 的单独端口上。

    因此,如果 Mosquitto 通常侦听端口 1883,则需要选择不同的端口来运行 MQTT over WebSockets 侦听器。例如

    listener 1883
    
    listener 8083
    protocol websockets
    

    然后,您需要更新 proxy_pass 条目中的端口以匹配。

    【讨论】:

    • 感谢您提供有用的提示,但仍然 502。mosquitto pub/sub 正在使用新的 websocket 端口。
    • 我的错,websocket正在监听。但是现在如何指定主题?
    • 主题不是 URL 路径,您需要在浏览器中运行 JavaScript MQTT 客户端
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-12-25
    • 2010-09-15
    相关资源
    最近更新 更多