Docker Compose部署Traefik+Mosquitto时wss安全WebSocket无法连接问题
问题根因
你配置的MQTT WebSocket对应Traefik HTTP路由绑定了websecure(443端口)入口,但前端WSS请求发往的是9001端口对应的websocket入口,该入口没有配置对应的路由规则与TLS证书,导致连接失败。
修复步骤
修改docker-compose.yml中mqtt服务的labels配置,将HTTP路由的入口指向websocket并确保TLS生效:
labels: - "traefik.enable=true" # 调整WebSocket对应HTTP路由的入口为9001对应的websocket入口 - "traefik.http.routers.mqtt.rule=Host(`broker.mydomain.com`)" - "traefik.http.routers.mqtt.entrypoints=websocket" # 这里从原有的websecure改成websocket - "traefik.http.routers.mqtt.tls.certresolver=letsencrypt" - "traefik.http.services.mqtt.loadbalancer.server.port=9001" # 原有TCP路由配置不变,对应8883的mqtts连接 - "traefik.tcp.routers.mqtt.rule=HostSNI(`broker.mydomain.com`)" - "traefik.tcp.routers.mqtt.entrypoints=mqtt" - "traefik.tcp.routers.mqtt.tls.certresolver=letsencrypt" - "traefik.tcp.services.mqtt.loadbalancer.server.port=8883"
额外检查项
- 确认云端服务器安全组/防火墙已放行9001端口的入站TCP流量
- 改完配置后执行
docker-compose down && docker-compose up -d重启服务生效 - 可先用
wscat工具测试WebSocket连通性,排除前端代码问题:wscat -c wss://broker.mydomain.com:9001
内容的提问来源于stack exchange,提问作者tsantor
相关产品推荐
相关产品推荐

