资讯动态

openclaw 显示 disconnected (1008):control ui 要求 HTTPS 或 localhost 的排查与修复

发布时间:2026/10/2 16:22:05 来源:尧图企业网站定制
1. 先搞清楚 1008 到底在拦什么openclaw 控制台弹出disconnected (1008): control ui requires HTTPS or localhost (secure context)很多人第一反应是网关挂了或者端口没开。其实这条报错跟网络连通性关系不大它拦的是浏览器的secure context判定。简单说浏览器认为你当前访问页面的来源不够安全于是拒绝让页面里的 WebSocket 或部分 API 正常工作openclaw 的控制 UI 检测到这个情况后主动断开并抛出 1008 这个关闭码。那什么算 secure context浏览器有一套明确规则协议是https://的算来源是http://localhost、http://127.0.0.1、http://[::1]的也算通过file://打开的本地文件在部分浏览器里算。除此之外你用http://192.168.1.50:19000这种局域网 IP 访问哪怕服务本身跑得好好的浏览器也会判定为非安全上下文控制 UI 就直接罢工。这就解释了一个很常见的现象你在本机用http://localhost:19000打开一切正常换到另一台电脑用http://192.168.1.50:19000打开就报 1008。服务没变变的是浏览器对来源的安全判定。openclaw 的控制 UI 依赖 WebSocket 长连接来推送状态而现代浏览器对非安全上下文里的部分能力做了限制openclaw 干脆在检测到非安全上下文时主动断开避免出现更难排查的半死状态。所以排查顺序应该是先确认你当前访问的 URL 是什么协议加什么主机名再判断它是否落在 secure context 白名单里最后才去看网关绑定模式和端口。很多人一上来就改--bind lan结果局域网能连上了但浏览器照样报 1008因为问题根本不在绑定而在访问入口的协议。我试过在同一个局域网里用两台机器对比A 机用http://localhost:19000访问控制台正常B 机用http://192.168.1.50:19000访问立刻 1008。把 B 机的访问地址换成通过反向代理暴露的https://claw.example.com问题消失。这个对比基本能锁定病根。下面这张表可以帮你快速判断自己属于哪种情况访问地址是否 secure context控制 UI 表现http://localhost:19000是正常http://127.0.0.1:19000是正常http://192.168.x.x:19000否报 1008http://公网IP:19000否报 1008https://任意域名是正常http://任意域名否报 1008理解这张表后面所有配置都是围绕「让访问入口变成 secure context」来做的。要么把访问入口收敛到 localhost要么给它套一层 HTTPS。没有第三条路。2. TaoToken 前置把模型侧先跑通在折腾 openclaw 控制 UI 的 HTTPS 之前建议先把模型调用这条链路跑通否则你修好了控制台点进去发现模型请求也报错排查会互相干扰。openclaw 这类终端 AI 助手最终要调用大模型 APITaoToken 提供的就是这层兼容接口Base URL 指向https://taotoken.net/api用标准的 OpenAI 兼容协议openclaw 里配置模型时直接填这个地址即可。你需要先在 TaoToken 控制台创建一个 API Key。打开https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite登录后新建一个 Key复制出来。这个 Key 就是 openclaw 调用模型时的凭证格式通常以sk-开头。注意 Key 只在创建时完整显示一次丢了就重新建一个。拿到 Key 之后在 openclaw 的配置里填三件套Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api注意不要带多余的路径后缀API Key 填你刚复制的那串Model ID 填你要用的模型名比如claude-sonnet-4-20250514这类。这三者缺一不可少填一个就会在模型请求阶段报 401 或 model not found。如果你用的是 Claude Code 这类工具配置方式类似在 settings 里指定ANTHROPIC_BASE_URL为https://taotoken.net/api再配上对应的 Key。openclaw 本身对 OpenAI 兼容协议支持较好所以优先用 OpenAI 格式的 Base URL 接入。这里有个容易踩的坑有人把 Base URL 填成https://taotoken.net/api/v1结果请求 404。TaoToken 的兼容层入口就是https://taotoken.net/api具体版本路径由客户端自己拼接你手动加/v1反而会错位。填之前先确认客户端默认会拼什么路径。模型侧跑通的标志很简单在 openclaw 里发一条测试消息能正常返回内容说明 Base URL、Key、Model ID 三件套都对。这时候再去处理控制 UI 的 1008就不会被模型报错干扰判断。如果你还没决定用哪个模型可以打开https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite看看当前可用的模型列表挑一个响应速度合适的。需要说明的是TaoToken 在这里的角色是模型 API 的接入层它不负责 openclaw 控制 UI 的 HTTPS 问题。控制 UI 的 secure context 是浏览器和 openclaw 网关之间的事跟模型 API 是两条独立的链路。把这两件事分开看排查思路会清晰很多。3. 可复制配置本地访问与反向代理 HTTPS解决 1008 有两条路线选哪条取决于你的使用场景。如果只是本机自己用走 localhost 路线最省事如果需要局域网或远程访问就必须上 HTTPS 反向代理。3.1 本机访问收敛到 localhostopenclaw 网关默认绑定模式是loopback也就是只监听本机回环地址这是最安全的默认值。你可以用下面的命令显式指定openclaw gateway --bind loopback --port 19000启动后用http://localhost:19000或http://127.0.0.1:19000访问这两个地址天然是 secure context控制 UI 不会报 1008。如果你之前为了局域网访问改成了--bind lan现在改回loopback就能恢复。配置文件在 Windows 下位于C:\Users\用户名\.openclaw\openclaw.jsonmacOS 和 Linux 在~/.openclaw/openclaw.json。控制 UI 相关的配置片段如下{ controlUi: { enabled: true, allowInsecureAuth: true }, gateway: { bind: loopback, port: 19000 } }allowInsecureAuth这个字段的作用是允许在非 HTTPS 环境下进行认证但它并不能绕过 secure context 判定。也就是说即使你开了allowInsecureAuth用http://192.168.x.x访问照样会报 1008因为浏览器层面就不认这个来源。这个字段主要影响的是认证流程的宽松度不是安全上下文的开关。很多人误以为加上它就能解决 1008结果白折腾。3.2 局域网或远程访问反向代理上 HTTPS如果你确实需要从别的机器访问正确做法是在 openclaw 前面放一个反向代理由代理负责 TLS 终止openclaw 本身仍然监听 loopback。这样浏览器访问的是https://地址secure context 成立1008 消失。以 Nginx 为例配置片段如下server { listen 443 ssl; server_name claw.example.com; ssl_certificate /etc/nginx/certs/claw.crt; ssl_certificate_key /etc/nginx/certs/claw.key; location / { proxy_pass http://127.0.0.1:19000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }这里有几个关键点。proxy_http_version 1.1和Upgrade/Connection两个 header 是 WebSocket 透传必须的少了它们控制 UI 的长连接会握手失败表现可能是连上了但状态不刷新或者直接又断。X-Forwarded-Proto告诉后端原始请求是 HTTPS某些框架会据此判断 secure context。证书可以用 Lets Encrypt 签发的正式证书内网环境也可以用自签证书但自签证书浏览器会警告需要手动信任否则 WebSocket 可能被拦。如果你用 Caddy配置更简单claw.example.com { reverse_proxy 127.0.0.1:19000 }Caddy 会自动申请证书并处理 WebSocket 升级适合不想手写一堆 header 的场景。配置完成后openclaw 网关仍然用--bind loopback启动不要改成lan。因为外部流量是通过 Nginx 转发进来的openclaw 只需要接受来自本机代理的连接即可。这样既满足了 secure context又没有把网关直接暴露到局域网。3.3 关于 Tailscale 的说明openclaw 支持--bind tailnet和--tailscale serve这类模式通过 Tailscale 网络暴露服务。Tailscale 的 MagicDNS 域名通常带 HTTPS 能力访问时是 secure context所以也能解决 1008。但这类方案依赖额外的网络组件配置门槛比本机 localhost 高。如果你只是想本机用没必要引入。如果你已经在用 Tailscale 组网那--tailscale serve是个顺手的选项它会把服务挂到一个带证书的域名下。不管走哪条路线核心原则不变让浏览器最终访问的 URL 是https://或http://localhost。抓住这一条1008 就不会再出现。4. 验证请求用浏览器控制台和日志确认恢复配置改完不代表问题就解决了得实际验证。验证分两层浏览器侧看 secure context 是否成立openclaw 侧看 WebSocket 是否握手成功。4.1 浏览器控制台验证 secure context打开控制台页面按 F12 调出开发者工具切到 Console 面板输入window.isSecureContext如果返回true说明当前页面处于安全上下文1008 的根因已经消除。如果返回false说明你访问的地址仍然不满足条件回去检查 URL 是不是还在用http://加非 localhost 主机名。再切到 Network 面板筛选WS类型刷新页面找到那条 WebSocket 连接。看它的状态码正常应该是101 Switching Protocols。如果看到1008或者连接直接 failed说明握手阶段就被拒了。点开这条请求看 Headers确认Origin头是什么openclaw 会校验 Origin 是否在允许列表里。如果你用了反向代理Origin 应该是https://claw.example.com而不是内网 IP。还可以在 Console 里手动建一个 WebSocket 测试const ws new WebSocket(wss://claw.example.com/ws); ws.onopen () console.log(connected); ws.onclose (e) console.log(closed, e.code, e.reason);如果onopen触发说明 WebSocket 链路通了。如果onclose里 code 是 1008reason 里会带具体原因对照着排查。4.2 openclaw 日志验证openclaw 网关启动时会在终端输出日志。正常启动后当你从浏览器连上控制 UI日志里会出现类似control ui connected或 WebSocket 升级成功的记录。如果连接被拒日志里会有rejected connection或origin not allowed之类的提示。启动命令加上详细日志openclaw gateway --bind loopback --port 19000 --log-level debug--log-level debug会打印握手细节包括收到的 Origin、协议协商结果。如果你看到日志里 Origin 是http://192.168.1.50:19000那就说明浏览器还在用旧地址访问secure context 没生效需要清一下浏览器缓存或者确认你打开的 URL 确实换了。一个完整的成功链路应该是这样的浏览器访问https://claw.example.comNginx 收到请求转发到127.0.0.1:19000openclaw 日志显示收到来自 127.0.0.1 的连接Origin 为https://claw.example.comWebSocket 升级成功控制 UI 状态变为 connected。浏览器 Console 里window.isSecureContext为 trueNetwork 里 WS 请求状态 101。如果中间任何一环对不上就停在那一步排查。比如 Nginx 转发了但 openclaw 没收到检查proxy_pass地址和端口openclaw 收到了但 Origin 校验失败检查代理有没有正确传递Host和X-Forwarded-*头。4.3 模型请求的验证控制 UI 连上之后顺手验证一下模型链路。在 openclaw 里发一条消息观察是否正常返回。如果报 401检查 TaoToken 的 API Key 是否填对如果报 model not found检查 Model ID 拼写如果超时检查 Base URL 是否可达。这一步能确认你的三件套配置无误避免控制台修好了但模型用不了。5. 本篇常见错排查实际排查中报错信息往往不止 1008 一条下面按真实遇到的报错逐个对照。报错一disconnected (1008): control ui requires HTTPS or localhost (secure context)这是本篇主问题。根因是访问地址不是 secure context。排查顺序先看浏览器地址栏协议和主机名http://加非 localhost 就是它。解决要么改用http://localhost:端口要么上 HTTPS 反向代理。注意allowInsecureAuth: true不能解决这个别在这上面浪费时间。报错二401 Unauthorized这个通常出现在模型请求阶段不是控制 UI。说明 TaoToken 的 API Key 没填、填错或者过期。检查 openclaw 配置里的 Key 字段确认以sk-开头且没有多余空格。如果 Key 是对的还报 401检查 Base URL 是不是写成了https://taotoken.net/api/v1这种带多余路径的形式改成https://taotoken.net/api。报错三local proxy failed或proxy error如果你在 openclaw 前面挂了反向代理这个错说明代理转发失败。常见原因是 Nginx 的proxy_pass指向了错误的端口或者 openclaw 网关根本没启动。先在服务器上curl http://127.0.0.1:19000确认后端活着再检查 Nginx 配置里的端口。另外 WebSocket 升级失败也会表现为 proxy error检查Upgrade和Connection两个 header 有没有配。报错四Error reading choices或invalid response这是模型返回格式解析失败通常发生在 Base URL 指向了不兼容的端点。确认你用的是 OpenAI 兼容协议Base URL 为https://taotoken.net/api。如果客户端默认按 Anthropic 格式解析而端点返回的是 OpenAI 格式就会报这个。检查客户端的协议设置必要时切换成 OpenAI 兼容模式。报错五OAuth相关错误如果你用的是 Claude Code 这类带 OAuth 流程的工具可能会遇到 OAuth 回调失败。这类工具通常需要配置ANTHROPIC_BASE_URL指向https://taotoken.net/api并配合 API Key 使用。如果它坚持走 OAuth 而你的接入层不支持就会卡在授权环节。解决办法是改用 API Key 认证模式在 settings 里显式指定 Key跳过 OAuth。报错六控制 UI 连上了但状态不刷新WebSocket 握手成功但数据不更新多半是反向代理没透传 WebSocket 帧。检查 Nginx 的proxy_http_version 1.1和Upgradeheader。Caddy 默认处理一般不会出这个问题。另外确认没有中间层做缓冲某些 CDN 会缓冲 WebSocket 导致延迟。报错七origin not allowedopenclaw 校验 WebSocket 的 Origin 头如果代理没有正确传递HostOrigin 可能变成127.0.0.1:19000不在允许列表里。在 Nginx 里加上proxy_set_header Host $host;和proxy_set_header X-Forwarded-Proto $scheme;让后端看到原始域名和协议。排查时建议按「浏览器地址 → 代理转发 → openclaw 日志 → 模型请求」这个顺序逐层确认每层都有明确的成功标志不要跳步。跳步容易把两个独立问题混在一起越查越乱。6. 把链路固定下来控制 UI 的 1008 本质是浏览器安全策略和访问入口不匹配跟 openclaw 本身健不健壮没关系。把访问入口固定成http://localhost:端口或https://域名问题就不会反复出现。本机自用就老老实实--bind loopback别为了图方便改成lan改完迟早撞上 1008。需要远程访问就认真配一次反向代理把 WebSocket 透传的 header 写全一次配好长期省心。模型侧的三件套也建议固定下来Base URL 用https://taotoken.net/apiKey 存在配置里别硬编码到脚本Model ID 选一个稳定的。这样控制台和模型两条链路都稳日常用起来就不会今天修这个明天修那个。如果后面要长期跑编码任务或者 Agent 流程可以考虑用 Coding Plan 这类方案把调用额度固定下来避免临时 Key 过期打断工作流。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑