【发布时间】: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