1. Openclaw 域名访问失败到底卡在哪一层
Openclaw 域名访问失败,是很多人在把本地网关搬到服务器后遇到的第一个硬钉子。你打开浏览器输入http://your-domain:18789/#token=xxx,页面要么转圈,要么直接甩出一句pairing required,令牌明明是对的,端口也放通了,可就是进不去。这个现象的本质不是网络不通,而是 Openclaw 的设备配对机制对「访问来源」有强制要求:它只认 localhost、SSH 隧道映射到本地的 localhost,以及 Tailscale 内网这三类安全上下文。域名访问哪怕解析正确、反向代理配好了,也会被判定为非可信来源,配对验证直接拒绝。
所以排查思路不能一上来就怀疑 DNS 或防火墙,而要按「DNS 解析 → 反向代理 → 鉴权链路」逐层定位。先确认域名能不能解析到服务器 IP,再确认反向代理有没有把请求正确转发到 18789,最后才是配对与令牌这一层。很多人卡在第三步却一直在查前两步,白白浪费时间。
这篇清单适合三类人:刚把 Openclaw 部署到云服务器、想用域名访问的开发者;已经配了 Nginx 但一直pairing required的运维;以及想把 endpoint 统一改到 TaoToken 通道、让请求走稳定入口的团队。下面每一步都给可复制的命令和配置,你可以直接照着跑。
先明确一个判断:如果你连curl http://127.0.0.1:18789都不通,那问题在服务本身,跟域名无关;如果本地通、域名不通,才进入 DNS 和反代排查;如果域名能返回页面但提示配对失败,那就是安全上下文问题,需要走「先配对、再放行域名」的流程。把这三层分开,排查效率会高很多。
2. 把 endpoint 统一到 TaoToken 的前置准备
在动 Openclaw 配置之前,建议先把模型请求的出口统一到 TaoToken。原因很实际:Openclaw 这类网关在配对、鉴权、转发过程中会多次调用模型接口,如果 endpoint 分散在多个地址,一旦某个域名解析抖动或鉴权失败,你很难判断是网关问题还是上游问题。把 endpoint 收敛到一个稳定通道,排查面会小很多。
TaoToken 的官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时直接写这个就行。你需要准备三件套:Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api,API Key 在控制台的 API Keys 页面生成,Model ID 按你实际要用的模型填。
生成 Key 的入口在这里:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。点进去创建一个新 Key,复制出来先存到安全的地方,后面配置里要用。如果你还不确定用哪个模型,可以先到模型对话页面试一下:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,确认模型能正常返回再写进配置。
这里有个容易踩的坑:很多人把 Base URL 写成带/v1的完整路径,结果请求 404。TaoToken 的 API 基址就是https://taotoken.net/api,具体路径由客户端拼接,你不要自己加后缀。另外 Key 不要写进会提交到 Git 的文件里,用环境变量或本地配置文件承载。
如果你后续要做长期编码或 Agent 类任务,可以了解下 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它更适合高频调用的场景。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,遇到参数不确定时对着文档核对,比反复试错快。
3. 可复制的 endpoint 与网关配置片段
这一节给的是能直接粘贴的配置。先处理 Openclaw 的网关配置,文件通常在/root/.openclaw/config.yaml。用vi /root/.openclaw/config.yaml打开,按i进入编辑模式,把下面这段按你的实际域名替换后写进去:
gateway: auth: token: "你的网关令牌" controlUi: allowedOrigins: - "http://localhost:18789" - "http://your-domain.com:18789" pairing: allowCrossOrigin: true注意allowedOrigins里必须先有 localhost,再放你的域名,顺序不影响功能,但 localhost 这条不能省,因为首次配对要靠它。allowCrossOrigin设为 true 是让已配对设备能通过域名访问,它不会绕过首次配对,只是放行后续请求。改完按ESC,输入:wq保存,然后重启网关:
pkill -f openclaw && openclaw dashboard接着配置模型 endpoint。如果你用的是支持 OpenAI 兼容格式的客户端,配置片段如下:
{ "base_url": "https://taotoken.net/api", "api_key": "你的TaoToken Key", "model": "你的Model ID" }如果你用的是 TOML 风格的配置,等价写法是:
[model] base_url = "https://taotoken.net/api" api_key = "你的TaoToken Key" model = "你的Model ID"三件套必须齐全:Base URL 是https://taotoken.net/api,API Key 是你刚生成的,Model ID 按实际填。少任何一个都会在请求时报鉴权或模型不存在。如果你在 Claude Code 这类工具里配置,同样填这三项,Base URL 不要带多余路径。
反向代理这块,如果你用 Nginx 把域名转到 18789,核心是保留原始 Host 和协议头,否则 Openclaw 判断来源时会出错。一个可用的片段:
location / { proxy_pass http://127.0.0.1:18789; 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; }配完nginx -t检查语法,再nginx -s reload。这一步只是让域名能到达网关,不代表配对能过,配对仍要走下一节的验证流程。
4. 验证请求与成功结果确认
配置写完必须验证,不然你不知道是通了还是假通。第一步先确认服务本身活着:
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:18789返回200或302都算正常,返回000说明服务没起来,回去看openclaw dashboard有没有报错。第二步验证域名解析:
dig +short your-domain.com输出的 IP 必须和你服务器公网 IP 一致,不一致就是 DNS 没生效或解析到了别处。第三步验证反向代理链路:
curl -s -o /dev/null -w "%{http_code}\n" -H "Host: your-domain.com" http://127.0.0.1:18789这个命令绕过 DNS,直接测反代到网关这一段,返回 200 说明反代配置没问题。第四步验证模型 endpoint 连通性:
curl -s https://taotoken.net/api/models \ -H "Authorization: Bearer 你的TaoToken Key" \ -o /dev/null -w "%{http_code}\n"返回200说明 Key 和 Base URL 都对。如果返回401,检查 Key 有没有复制完整、有没有多余空格。
配对验证这一步最关键。先在本地电脑开 SSH 隧道:
ssh -N -L 18789:127.0.0.1:18789 root@你的服务器IP保持这个终端不关,然后用浏览器无痕模式访问http://localhost:18789/#token=你的网关令牌,点配对按钮,看到「配对成功」为止。这一步必须在 localhost 下完成,域名访问做不了首次配对。配对成功后,再用http://your-domain.com:18789/#token=你的网关令牌访问,此时网关识别你的设备为可信设备,不再提示pairing required。如果还提示,清浏览器缓存或用新的无痕窗口重试。
成功的结果是:域名能打开控制界面,模型请求返回正常,curl各层都是 200。任何一层不是 200,就回到对应小节重查。
5. 本篇常见报错排查对照
pairing required是最常见的报错,根因就是首次配对没在安全上下文完成。解决方式是先走 SSH 隧道 + localhost 配对,再放行域名。不要试图通过改allowedOrigins绕过首次配对,机制上不允许。
401 Unauthorized出现在模型请求时,八成是 Key 问题。检查三件套:Base URL 是不是https://taotoken.net/api,Key 有没有复制全,Model ID 是否存在。如果 Key 刚生成,确认没有把控制台里的显示掩码当成完整 Key。
local proxy failed通常出现在客户端配置了本地代理但代理没起来,或者 Base URL 写成了本地地址。把 endpoint 直接指向https://taotoken.net/api,不要经过本地转发层,能排除这一层干扰。
reading choices这类报错一般是响应体解析失败,常见于 Base URL 多写了/v1或路径拼错。回到配置里核对,Base URL 只写到/api,后面的路径交给客户端。
OAuth相关报错多出现在 Claude Code 这类工具的鉴权流程里。如果你用的是 API Key 模式,确认没有混用 OAuth 配置;如果工具要求 OAuth,按它的文档走,同时确保 Base URL 指向 TaoToken 通道。遇到不确定的报错,先到接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 对照参数,再决定改哪里。
还有一个隐蔽的坑:浏览器缓存导致配对状态错乱。换域名访问前,用无痕模式或清缓存,否则旧的安全上下文可能干扰判断。
6. 后续接入与长期使用建议
排查完这一轮,你手里应该有一套能跑通的配置:Openclaw 网关放行了域名,模型 endpoint 统一到了 TaoToken,curl各层验证通过。后续如果要做长期编码或 Agent 任务,建议把 Key 管理规范化,不同项目用不同 Key,方便出问题时定位和吊销。API Keys 页面可以随时生成和删除:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。
如果你在 Claude Code 里接入,配置同样围绕 Base URL、Key、Model ID 三件套展开,具体步骤看文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。想先验证模型效果,用模型对话页面最快:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。长期高频调用的话,Coding Plan 更合适:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。
最后提醒一句:不要把 18789 端口直接暴露到公网,控制界面是管理入口,暴露出去风险很高。用 Nginx 反代加密码验证,或者只走内网和 SSH 隧道。域名访问只适用于已配对设备,首次配对永远走 localhost。把这两条记住,下次再遇到pairing required你就知道该往哪查了。