使用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
- 配置反向代理规则:
- 打开IIS管理器,选中目标站点,进入URL Rewrite
- 添加反向代理规则,将
/mqtt路径转发到ws://[Ubuntu虚拟机IP]:9001(注意使用ws协议,对应WebSocket) - 在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
相关产品推荐
相关产品推荐

