
OpenClaw 在腾讯云上挂完 Nginx 反代、域名能打开控制台之后下一道坎来得挺突然页面进得去发一条消息却一直转圈。原教程把 127.0.0.1:18789 怎么暴露到公网讲得很细装 Nginx、写 server 块、reload、开安全组、上证书可它没交代 OpenClaw 的模型请求往哪儿发。补这个空档不用动 Nginx先去 TaoToken 拿一把 Key——https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 注册后在控制台创建再把 ~/.openclaw/openclaw.json 里模型 provider 的 baseUrl 改成 https://taotoken.net/api。建议把这两条线拆开看。第一条是「浏览器 → 域名 → Nginx → 127.0.0.1:18789」它决定控制台能不能打开第二条是「OpenClaw 进程 → 模型 API」它决定你发出去的那条消息有没有人回答。原文配完第一条就收尾了第二条留了个空。TaoToken 在这篇里的角色只有两个给一把 API Key给一个统一入口反代、证书、端口放行、可信代理这些活仍然归腾讯云的 Nginx 和安全组管。1. Nginx 反代先验一遍openclaw.conf 与 127.0.0.1:18789很多人一出问题就先去改模型配置结果绕半天发现域名根本没通。所以顺序别颠倒先确认控制台能稳定打开再动 provider。这一步和原文完全一致只是我们把它当成前置检查而不是终点。1.1 写 sites-available/openclaw.confproxy_pass 指向 18789在腾讯云那台机器上装好 Nginx 后配置文件放在/etc/nginx/sites-available/openclaw.conf。核心就一件事把外部请求转给本机监听 18789 的 gateway 进程。下面这份可以直接对照改server_name换成你自己的域名。server { listen 80; server_name openclaw.example.com; location / { proxy_pass http://127.0.0.1:18789; proxy_http_version 1.1; 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_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }后面两行 Upgrade / Connection 是给 WebSocket 用的。OpenClaw 控制台是长连接交互少了这两行页面能加载出来消息却推不回来表现和「模型没返回」很像很容易误判成通道问题。写完后建个软链让 Nginx 真正加载它sudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/openclaw.conf这里有个小前提gateway 最好绑在回环地址上proxy_pass才写127.0.0.1:18789。如果它绑的是0.0.0.0也别图省事把 18789 直接开到公网继续让 Nginx 顶在前面安全组里只放 80 和 443。1.2 nginx -t 通过后 systemctl reload nginx改完不要直接 reload先做语法检查sudo nginx -t看到syntax is ok和test is successful再执行sudo systemctl reload nginx然后用浏览器打开域名。如果这时控制台能出现登录框或者会话列表说明第一条线通了可以进入第二步。如果 502、504先回头看 18789 上到底有没有进程在听ss -lntp | grep 18789别急着去翻模型配置——那是下一章的事。2. openclaw.json 的 gateway 区块trustedProxies 与 allowedOrigins控制台能打开不代表请求被信任。请求绕了一圈 Nginx 才到 gateway源 IP 全变成了 127.0.0.1Origin 头也跟你直接访问时不一样。原文在~/.openclaw/openclaw.json的gateway区块补trustedProxies和allowedOrigins就是解决这件事。2.1 反向代理之后trustedProxies 决定 gateway 认不认转发头Nginx 会把真实客户端 IP 塞进X-Forwarded-For但 gateway 默认不一定采信这个头。如果不把127.0.0.1加进trustedProxies它可能把每个请求都当作来自本机登录态、限流、来源校验都会出现奇怪的行为比如刚登录就被踢、发消息提示来源非法。{ gateway: { bind: loopback, port: 18789, trustedProxies: [127.0.0.1], allowedOrigins: [https://openclaw.example.com] } }trustedProxies里填的是「谁有资格转发请求」也就是本机的 Nginx所以是127.0.0.1。如果你的架构里还有一层云厂商的负载均衡那就把它对应的网段也一并加进去。2.2 allowedOrigins 写具体域名别图快写星号allowedOrigins是浏览器侧的跨域白名单填的是你最终访问的地址。上了 HTTPS 之后要连https://一起写别只写域名。写成*图一时方便等于把这层校验关掉后面排查问题时会少一个重要的信号来源。这两项改完先重启一次 gateway 让配置生效openclaw gateway restart重启后在控制台刷新页面确认不报来源错误。到这一步「浏览器 → Nginx → gateway」这条链已经完整了。3. 模型 provider 换到 TaoTokenopenclaw.json 里只改几个字段控制台能打开、能登录发消息依然没有回复原因基本就落在这一章。OpenClaw 需要知道「调哪家的模型、用哪把 Key、请求发到哪个地址」。原教程没提这段我们把它补上。3.1 先创建 Key打开 TaoToken 控制台浏览器里打开 TaoToken注册登录后进控制台在 API Keys 页面新建一把。复制时注意别带首尾空格Key 只显示一次的话先存进密码管理器。这段动作对应原文里「准备凭据」的位置只是凭据来源换成了 TaoToken。3.2 baseUrl 填 https://taotoken.net/api末尾不要 /v1这是最容易错的一步。填进openclaw.json的是接口地址https://taotoken.net/api不带/v1也不要手动拼/chat/completions路径交给 OpenClaw 自己补。填成.../api/v1大概率拿到 404然后你会以为是模型 ID 错了来回改半天。同时提醒一句https://taotoken.net/api是给程序用的不要在后面加任何查询参数官网落地页才用于注册和看用量两者别混。3.3 模型 ID 以模型广场当时列表为准不要凭记忆写模型名。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 进模型广场挑一个当前可用的 ID原样复制到配置里。下面这份 JSON 是改完后的样子字段结构以你本机 OpenClaw 版本为准重点是baseUrl、apiKey、模型id这三处{ models: { providers: { taotoken: { api: openai-completions, baseUrl: https://taotoken.net/api, apiKey: YOUR_API_KEY, models: [ { id: YOUR_MODEL_ID, name: YOUR_MODEL_ID } ] } } } }如果你的openclaw.json里原本就有别的 provider 条目直接把baseUrl和apiKey换成上面两行即可不用整份重写。改完保存这次的配置改动只涉及模型通道Nginx 和证书一行都不用回去动。4. 安全组、Certbot 与 gateway restart 后的验证到这里还剩三件事把 80/443 放出去、把 HTTPS 挂上、重启并验证。顺序和原文一致只是最后多了一条发消息的确认动作。4.1 腾讯云安全组放行 80/443再用 Certbot 上证书在腾讯云控制台的云服务器页面找到安全组入站规则里放行 TCP 80 和 443。80 是给 Certbot 做域名校验用的签完证书可以保留也可以只留跳转。然后在机器上执行sudo certbot --nginx -d openclaw.example.comCertbot 会自动改 Nginx 配置并 reload顺便帮你把 80 跳 443。完成后用curl -I https://openclaw.example.com看一眼返回 200 或 302 就说明证书和服务都正常。4.2 openclaw gateway restart然后在控制台发一条消息配置文件改动不会自动生效重启一次openclaw gateway restart接着在已经能用域名打开的控制台里发一条最简单的消息比如「你好」。有正常回复说明第二条线也通了。如果没回复先别乱改 Nginx按下一章的对应关系查。提示验证时尽量用域名访问控制台不要用 IP 端口的临时地址。浏览器在不同 Origin 下的行为不一样用 IP 测出来的结果不能代表线上状态。5. 排障对照401、404、502 和一直转圈分别查哪里这套架构有两段报错也分两段。判断方法很简单能打开控制台但没回复问题在模型通道控制台本身打不开问题在 Nginx 那一段。5.1 401 或 403先看 Key 和鉴权头401 基本都是凭据没被接受。检查apiKey是否是YOUR_API_KEY原样没替换、复制时是否混进了空格或换行、引号是否闭合。改完记得再openclaw gateway restart一次。如果 Key 确认没问题去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 的用量页面看看这把 Key 是否被禁用或额度见底。5.2 404baseUrl 多写了 /v1404 在模型通道里八成是路径问题。把https://taotoken.net/api写成https://taotoken.net/api/v1请求就会落在不存在的路径上。回头把/v1去掉重启再试。顺带检查一下有没有手滑在/api后面加了 UTM 参数——那串东西只属于网页链接不属于接口地址。5.3 502 或消息一直转圈查 Nginx 到 18789 和 trustedProxies502 说明 Nginx 找不到后面的服务回到第 1 章ss -lntp | grep 18789确认进程在听sudo nginx -t确认配置没错。一直转圈但没报错更像是 WebSocket 没走通检查Upgrade和Connection两个头是否写上。还有一种容易被忽略的情况trustedProxies漏了127.0.0.1请求被 gateway 当成异常来源静默丢弃控制台看起来一切正常就是没回应。现象先查典型原因控制台打不开Nginx、安全组80/443 未放行、conf 未启用能打开但无回复openclaw.jsonKey 错、baseUrl 带了 /v150218789 进程gateway 没起来或端口不对一直转圈WebSocket 头Upgrade / Connection 缺失6. 跑通之后回控制台对一下这次调用配置保存、openclaw gateway restart执行完先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息。这一步的意义是隔离变量如果在模型对话里正常、在 OpenClaw 里不正常那问题一定在openclaw.json或 gateway 那段而不是 Key 本身。要长期挂着跑任务可以看看 Coding Plan 的额度是否够用Key 的管理和重建在 控制台 API Keys 页面完成。如果openclaw.json的字段名和你本机版本对不上可以对照 接入文档 里关于 Base URL 和环境变量的写法思路是一样的——地址统一指向https://taotoken.net/api凭据用占位符替换成本次新建的 Key。最后留个习惯每次改完openclaw.json都在已经能通过域名打开的控制台里发一条消息再走人。反代和证书是「门」模型通道是「路」两边各查各的排障时间能省下一大半。