Windows 11下Mosquitto 2.0.15 Websocket端口监听异常求助
问题背景
两台软硬件完全一致的Windows 11机器部署Mosquitto 2.0.15,使用以下相同配置:
allow_anonymous true listener 1883 0.0.0.0 listener 8883 0.0.0.0 protocol mqtt cafile C:\Program Files\mosquitto\certs\ca.crt certfile C:\Program Files\mosquitto\certs\server.crt keyfile C:\Program Files\mosquitto\certs\server.key tls_version tlsv1.2 listener 9001 0.0.0.0 protocol websockets cafile C:\Program Files\mosquitto\certs\ca.crt certfile C:\Program Files\mosquitto\certs\server.crt keyfile C:\Program Files\mosquitto\certs\server.key tls_version tlsv1.2 log_type all log_timestamp true log_timestamp_format %Y-%m-%dT%H:%M:%S connection_messages true
注:allow_anonymous设为true仅用于测试,正式环境将采用用户名/密码认证。
第一台机器执行启动命令mosquitto -c 'C:\Program Files\mosquitto\mosquitto.conf' -v后,日志显示所有端口正常绑定:
2023-12-06T15:41:22: mosquitto version 2.0.15 starting 2023-12-06T15:41:22: Config loaded from C:\Program Files\mosquitto\mosquitto.conf. 2023-12-06T15:41:22: Opening ipv4 listen socket on port 1883. 2023-12-06T15:41:22: Opening ipv4 listen socket on port 8883. 2023-12-06T15:41:22: Opening websockets listen socket on port 9001. 2023-12-06T15:41:22: mosquitto version 2.0.15 running
通过Get-NetTCPConnection -LocalPort 9001可确认端口处于Listen状态,1883和8883端口状态也正常。
但第二台机器使用相同配置启动后,日志同样显示三个端口已绑定,然而Get-NetTCPConnection -LocalPort 9001无法查到该端口的监听记录,1883和8883端口正常。已确认9001端口未被其他应用占用,更换Websocket端口后问题依旧。
解决方案
检查Windows防火墙规则
即使两台机器软硬件一致,防火墙规则可能存在差异。可临时关闭Windows防火墙测试是否能正常监听9001端口,若测试有效,手动添加入站规则:打开控制面板→Windows Defender防火墙→高级设置→添加入站规则,允许TCP端口9001,或直接允许mosquitto.exe程序通过防火墙。重新安装Mosquitto以验证Websocket组件
Mosquitto的Websocket功能依赖libwebsockets库,第二台机器可能存在组件损坏或未正确安装的情况。重新下载Mosquitto 2.0.15安装包,覆盖安装第二台机器的Mosquitto,确保libwebsockets相关文件完整。以管理员权限启动Mosquitto
Windows下部分端口操作需要管理员权限,即使日志显示绑定成功,实际可能因权限不足无法完成监听。右键命令提示符/Windows Terminal选择「以管理员身份运行」,执行启动命令:mosquitto -c "C:\Program Files\mosquitto\mosquitto.conf" -v注意路径使用双引号避免空格解析问题。
检查IPv6监听状态
配置中使用0.0.0.0仅绑定IPv4,但Mosquitto可能默认同时绑定IPv6地址。执行以下命令查看IPv6端口监听情况:Get-NetTCPConnection -LocalPort 9001 -AddressFamily IPv6若发现仅在IPv6上监听,可在websocket listener配置中明确指定
listener 9001 ::强制IPv6,或保持listener 9001 0.0.0.0确保IPv4监听。检查系统事件日志与证书权限
打开事件查看器→Windows日志→应用程序日志,搜索Mosquitto相关错误信息,可能存在控制台日志未显示的底层问题(如证书文件读取权限不足)。检查证书文件ca.crt、server.crt、server.key的权限,确保Mosquitto运行用户拥有读取权限。
内容的提问来源于stack exchange,提问作者tsantor

