修复 OpenClaw WebSocket 连接错误 | AI生成和翻译

Home 2026.03

问题: 如何修复 OpenClaw gateway 中的 WebSocket 连接错误 “ws://192.168.1.36:18789/” failed: WebSocket is closed before the connection is established?

回答:

此错误通常表示 WebSocket 握手已启动,但服务器立即拒绝并关闭它(通常使用代码 1008)。这不是因为在本地 LAN 上使用 ws://(HTTP)而不是 wss://(HTTPS)导致的——在大多数情况下,纯 HTTP + ws:// 可以正常工作。

根本原因几乎总是以下服务器端检查失败之一(或两者):

  1. Origin not allowed — 浏览器中的 Origin 标头不符合允许列表
  2. Device identity required — 即使对于 Control UI,gateway 也会强制执行设备配对/身份验证,除非明确禁用

快速修复步骤(LAN / HTTP 设置)

  1. 检查当前配置
    运行此命令(如果您的 CLI 路径不同,请调整):

    openclaw config get gateway.controlUi
    

    查找:

    • allowedOrigins:应包含您确切的浏览器 URL,例如 ["http://192.168.1.36:18789"]
      (无尾随斜杠,确切协议 + IP + 端口)
    • dangerouslyDisableDeviceAuth:应为 true

    如果任一项缺失或错误 → 这就是问题所在。

  2. 设置正确值

    # 设置浏览器中使用的确切 origin
    openclaw config set gateway.controlUi.allowedOrigins '["http://192.168.1.36:18789"]'
    
    # 禁用设备身份检查(非安全上下文/非回环浏览器访问需要)
    openclaw config set gateway.controlUi.dangerouslyDisableDeviceAuth true
    
    # 可选,但对于纯 HTTP 通常有帮助:
    openclaw config set gateway.controlUi.allowInsecureAuth true
    

    allowedOrigins 的重要说明:

    • 必须完全匹配浏览器地址栏中显示的内容(协议 + 主机 + 端口)。
    • 不要使用 ["*"],除非这是临时测试机器——这会带来很大的安全风险。
    • 如果您通过 http://localhost:18789 或其他主机名访问,也添加它:["http://192.168.1.36:18789", "http://localhost:18789"]
  3. 重启 gateway 以使更改生效

    openclaw gateway restart
    

    或如果使用 systemd:

    systemctl --user restart openclaw-gateway.service
    
  4. 检查 gateway 日志以获取真实拒绝原因

    journalctl --user -u openclaw-gateway.service -n 80 --no-pager
    

    查找包含以下内容的行:

    • origin not allowed
    • device-required
    • code=1008
    • reason=

    这将确切告诉您哪个检查失败了。

HTTPS / wss:// 替代方案(更安全的长期方案)

常见陷阱

应用配置 + 重启后,刷新 Control UI 页面 — WebSocket 应该能连接。

参考资料:


Back Donate