当前时间: 2026-08-09 16:48:45
分类:办公文件
评论(0)
Openclaw手机连不上自家服务器排查
手机配对自家服务器上的 OpenClaw 网关。主机、端口、令牌全填对了,证书指纹也对上、点了「信任」,最后界面还是弹出一句:「连接问题 · 无法访问您的 Gateway」。
排障排了一个多小时。最后发现,问题不在网关,不在证书,在服务器上三个端口的反代配置。一个看起来完全正常、却把 WebSocket 请求转发给了博客程序的 443 端口。
记录:2026-08-09 上午 · 一次 OpenClaw 手机节点配对排障
OpenClaw 官方 App 手动配对网关,流程走到底:证书指纹从服务器抓下来、SHA-256 核对一致,点了信任,然后就卡在 「连接问题」。
这个报错最迷惑的地方在于:证书信任弹窗是正常出现的。按直觉,证书都过了,说明网络通、TLS 通,那剩下的就是令牌问题。但令牌明明是对的。
证书信任通过 ≠ 连接成功。TLS 握手和 WebSocket 建连是两回事,中间隔着一整层反代。
STEP 1 · 网关健康检查
openclaw status 一切正常:网关运行中、ws 可达、auth token 有效、8443 端口代理正常。
STEP 2 · 证书指纹核对
从 thinkspc.fun:8443 抓取 Let’s Encrypt 证书,计算 SHA-256 指纹,与 App 要求一致。
STEP 3 · 关键一击:网关日志
查看 11:43~11:49 的网关日志,没有任何来自手机的 WebSocket 连接记录。
网关日志里没有连接记录,意味着手机发的请求根本没到网关。服务端全绿、请求却到不了,问题只可能出在中间那一层:反向代理。
检查 nginx 配置,真相大白。服务器上有三个监听端口,反代目标完全不一样:
443
→ 127.0.0.1:8090(Halo 博客)
❌ 抢了网关的流量
8443
→ 127.0.0.1:18789(OpenClaw 网关)
✅ 正确
OpenClaw 的 device-pair 插件,publicUrl 配置指向 wss://thinkspc.fun/gateway,默认走 443 端口。而 nginx 的 443 端口,/ 路径反代给的是 Halo 博客(8090),只有 8443 端口才带 WebSocket upgrade 头、正确转发给网关(18789)。
为什么证书信任能通过?因为 443 和 8443 用的是同一张 Let’s Encrypt 证书,TLS 握手照样成功,信任弹窗正常出现。但紧接着的 WebSocket 升级请求,被 443 转发给了博客程序。博客不认识 WebSocket 协议,连接直接失败,App 报「连接问题」。
最坑的地方就在这里:证书是同一个,信任流程完全正常,肉眼可见的一切都对,只有请求被悄悄转发错了地方。
把 publicUrl 从 wss://thinkspc.fun/gateway 改成 wss://thinkspc.fun:8443,重新生成配对码,手机重新配对,openclaw nodes approve 放行设备,一次通过。
bootstrap token 有效期只有 10 分钟,过期要重新生成配对码,不能用旧的反复试。
手动设置里端口默认填 18789 是内网端口,公网连接必须走 8443。
443 是「看起来最对」的默认端口,恰恰是最容易踩的坑。
1. 证书信任通过,不代表 WebSocket 能通。TLS 和 WS 是两层,中间还夹着反代。信任弹窗正常,只说明 TLS 握手成功,不代表升级请求能到应用。
2. 服务端日志里没有连接记录,先查代理层,别查应用层。这次如果继续在网关配置里找原因,永远找不到。请求根本没到网关。「日志无记录」本身就是最重要的线索。
3. 多端口公网服务器,先画一张端口对照表。80/443/8443 各自反代到哪、带不带 WS 支持,写清楚。一次画表十分钟,排查时省一小时。
排查连通性问题,直接用Ai来帮你修复,先回答「请求到底到了哪一层」,再谈修哪里。
· 如果你也在自建 OpenClaw 网关,欢迎交流
基本
文件
流程
错误
SQL
调试
- 请求信息 : 2026-08-09 17:41:09 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/917642.html
- 运行时间 : 0.194051s [ 吞吐率:5.15req/s ] 内存消耗:4,591.42kb 文件加载:145
- 缓存信息 : 0 reads,0 writes
- 会话信息 : SESSION_ID=abb9e2e8eb6a97c159dcb9293de1659d
- CONNECT:[ UseTime:0.001028s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
- SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001409s ]
- SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000717s ]
- SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000678s ]
- SHOW FULL COLUMNS FROM `set` [ RunTime:0.001443s ]
- SELECT * FROM `set` [ RunTime:0.000520s ]
- SHOW FULL COLUMNS FROM `article` [ RunTime:0.001428s ]
- SELECT * FROM `article` WHERE `id` = 917642 LIMIT 1 [ RunTime:0.001499s ]
- UPDATE `article` SET `lasttime` = 1786268469 WHERE `id` = 917642 [ RunTime:0.001520s ]
- SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000606s ]
- SELECT * FROM `article` WHERE `id` < 917642 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000936s ]
- SELECT * FROM `article` WHERE `id` > 917642 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001073s ]
- SELECT * FROM `article` WHERE `id` < 917642 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001834s ]
- SELECT * FROM `article` WHERE `id` < 917642 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001801s ]
- SELECT * FROM `article` WHERE `id` < 917642 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002277s ]
0.197892s