OpenClaw 显示 "disconnected (1006): no reason" 完整排查与修复指南

OpenClaw 显示 "disconnected (1006): no reason" 完整排查与修复指南

是 OpenClaw 控制界面(Control UI)在访问端口 18789 时出现的 WebSocket 异常断开错误。WebSocket close code 1006 的含义是:连接异常终止,且没有收到正常的 close frame——通常意味着底层 TCP 连接被强制断开,而非应用层主动关闭。根据 GitHub Issue #19248(Ubuntu 24 + Node.js 22 环境下的精确复现),该错误最常见的三个根因依次是:设备配对未通过验证、反向代理未正确传递 WebSocket upgrade 头、Origin 安全校验失败。

openclaw显示disconnected-no-reason-img1


错误码 含义 OpenClaw 常见场景 1006 异常关闭,无 close frame(TCP 层断开) 设备未配对、代理配置错误、防火墙截断 1005 无状态码的正常关闭 心跳超时、Node.js GC 压力、Discord/Slack 插件 4008 应用层自定义错误 认证失败、版本不兼容(已知 regression bug) 1001 端点离开(Going Away) 服务器重启、进程退出

1006 是最难排查的错误码,因为没有任何应用层信息,必须从网络层和配置层逐一排查。


OpenClaw 的 Control UI 实现了设备配对安全机制:首次通过浏览器访问 时,网关不会自动授权,而是生成一个待审批的 pairing request。若配对未完成,WebSocket 握手后立即断开,日志不会输出明显报错——只显示 。

诊断命令


若看到 的记录,说明就是这个问题。

修复命令



通过域名或 HTTPS 访问 OpenClaw Control UI 时,若反向代理没有正确传递 WebSocket upgrade 握手头,连接会在协议升级阶段被静默丢弃,表现为 1006 断连。

诊断方法

  • 绕过代理,直接访问
  • 若直连正常而通过域名断连 → 确认是代理配置问题

Nginx 标准修复配置


Caddy 配置(Caddy 原生支持 WebSocket,通常只需):



OpenClaw 对 WebSocket 连接来源做了 Origin 头校验,通过非 / 的域名访问时,若 Origin 头不在白名单内,连接会被拒绝并表现为 1006。

openclaw 配置修复方案 A:在 Nginx 中强制将 Origin 改写为 localhost(见上方 Nginx 配置)。

修复方案 B:在 OpenClaw 配置中开启宽松认证:


⚠️ 会降低安全性,仅推荐在内网可信环境使用,不建议公网暴露。


若不想配置反向代理,SSH 隧道是最简单可靠的远程访问方案,完全绕过 WebSocket upgrade 问题:


SSH 隧道通过加密通道传输,WebSocket 连接对本地浏览器来说就是直连 localhost,不经过任何中间层,彻底消除代理相关的 1006 错误。

openclaw显示disconnected-no-reason-img2


若表现为规律性断连(每隔固定时间断开一次,自动重连后恢复),这与随机 1006 错误不同,根因通常在网络层:

排查步骤

  1. 检查防火墙 / NAT 超时:企业防火墙和家用路由器通常对空闲 TCP 连接设置超时(常见值 5-15 分钟)。WebSocket 长连接若没有心跳保持,会被防火墙静默断开。

    修复:在 Nginx 配置中增加 keepalive,或在 OpenClaw 中调整 WebSocket ping interval。

  2. 检查 Node.js GC 压力
    
    
  3. 查看系统日志关联事件
    
    
  4. 检查 Discord / Slack 插件心跳:若是特定渠道插件(Discord、Slack)定期断连,通常是平台侧的心跳超时,可升级对应插件版本或调整 health-monitor 重连间隔。



场景 1:首次安装后浏览器访问立即断连
→ 根因:设备配对未完成。执行 查看 pending 请求, 批准。

场景 2:本地访问正常,通过域名/Nginx 访问断连
→ 根因:Nginx 缺少 WebSocket upgrade 头。添加 和 。

场景 3:Ubuntu 服务器部署,飞书插件配置后断连
→ 根因:可能是 Origin 校验失败 + 设备配对双重问题。按 Issue #19248 的解法:先 ,再配置 Nginx Origin 头改写,或临时开启 。

场景 4:正常运行一段时间后规律性断连(每 10-15 分钟)
→ 根因:防火墙 / NAT TCP 超时,或 Node.js GC 压力导致心跳 ACK 延迟。排查 日志,必要时配置 TCP keepalive。

场景 5:更新版本后出现 4008 错误
→ 根因:已知 regression bug(Issue #42838、#41285)。回滚到上一稳定版本,或等待官方修复补丁。


Q: 能直接告诉我是哪个原因吗?
能检测守护进程状态、端口占用、配置文件格式等问题,但目前无法自动诊断 WebSocket 握手失败的具体原因。它更多用于排查安装配置问题,而非实时连接问题。建议配合 查看握手阶段的详细日志。

Q:开启了 还是断连怎么办?
只解决 Origin 校验问题,不解决设备配对和代理头问题。若开启后仍然断连,需要同步检查:(1) 是否有 pending 配对请求,(2) 代理是否正确传递了 和 头。

Q:不想自己折腾 Nginx 和设备配对,有没有更简单的方案?
有两种选择:(1) 使用 SSH 隧道(),本地直连无需配置代理;(2) 切换到 Linclaw(七牛云推出的 OpenClaw 桌面版),桌面端应用原生提供 Control UI,不存在 WebSocket 配对和代理配置问题。

Q:1006 错误日志里没有任何附加信息,怎么进一步排查?
1006 的特点就是无附加信息。最有效的排查方式是”排除法”:先用 确认 HTTP 层正常 → 再用 SSH 隧道测试绕过代理 → 再用 检查配对 → 最后抓包()观察 TCP 层断开时机。


OpenClaw 出现 的核心是 WebSocket 握手在底层被静默终止,三个最常见根因按排查优先级排序:① 设备配对未通过()→ ② 反向代理未配置 WebSocket upgrade 头(Nginx 配置修复)→ ③ Origin 安全校验失败( 或 Nginx Origin 改写)。定期断连(每 10-15 分钟)则通常是防火墙 / NAT TCP 超时所致,需在网络层解决。

据 GitHub Issue #19248(2026 年 2 月)和相关 issue 记录,上述三个根因覆盖了绝大多数 1006 断连报告。本文内容基于 2026 年 3 月 OpenClaw 公开 issue 整理,具体路径和命令随版本迭代可能变化,建议结合 确认所用版本。

延伸资源

  • OpenClaw 官方 GitHub Issue #19248:https://github.com/openclaw/openclaw/issues/19248
  • Linclaw 官网(无 WebSocket 配对问题的桌面版):https://linclaw.qnlinking.com/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/278188.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 上午7:42
下一篇 2026年3月14日 上午7:42


相关推荐

关注全栈程序员社区公众号