You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用IIS URL Rewrite连接MQTT容器出现502错误求助

解决方案分析

502错误的核心原因是IIS URL Rewrite仅能处理HTTP/HTTPS协议请求,无法直接转发MQTT协议流量。你尝试的https://subdomain.domain.com/mqtt是HTTP请求路径,但MQTT基于TCP专用协议,协议不兼容导致IIS无法正确转发到Mosquitto的9001端口(当前配置未明确开启WebSocket模式,该端口仅监听普通TCP连接)。

具体调整步骤

1. 修正Mosquitto配置,启用WebSocket监听

当前listener 9001仅开启TCP监听,需指定协议类型以支持WebSocket。修改mosquitto.conf:

persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
# 普通MQTT TCP端口
listener 1883
# MQTT over WebSocket端口,明确指定协议
listener 9001
protocol websockets

## Authentication ##
allow_anonymous true

修改后重启Mosquitto容器:

docker-compose restart mosquitto

2. 配置IIS反向代理(需ARR模块)

URL Rewrite单独无法处理WebSocket流量,需配合Application Request Routing(ARR)模块:

  • 安装IIS组件:Application Request Routing和WebSocket Protocol
  • 配置反向代理规则:
    1. 打开IIS管理器,选中目标站点,进入URL Rewrite
    2. 添加反向代理规则,将/mqtt路径转发到ws://[Ubuntu虚拟机IP]:9001(注意使用ws协议,对应WebSocket)
    3. 在ARR的服务器代理设置中,勾选「启用WebSocket代理」

3. 调整客户端连接协议

客户端需使用wss://subdomain.domain.com/mqtt(加密WebSocket)或ws://subdomain.domain.com/mqtt(普通WebSocket)连接,而非传统mqtt://协议。若需加密,可让IIS处理HTTPS终止,后端转发至ws协议;也可在Mosquitto的WebSocket监听中配置SSL证书。

4. 验证网络与日志

  • 确认Windows虚拟机可连通Ubuntu虚拟机IP
  • 检查Windows防火墙是否允许访问Ubuntu的9001端口
  • 查看Mosquitto日志/mosquitto/log/mosquitto.log,确认是否有连接请求到达

内容的提问来源于stack exchange,提问作者Thibault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:07:45