目标很明确:在 vpshalo 多区域节点上,用 nginx stream + SNI 给 OpenClaw v2026.5.x 做四层分流,同时坚持 gateway/doctor 只绑定 127.0.0.1,并把 status/doctor 合并成区域失败摘要。与 Traefik/frp 路线相比,本方案角色更少、排障更直观。
拓扑:多区域最小链路与边界
推荐拓扑是「每区入口机 + 每区 OpenClaw worker」。入口机只开 443;worker 上 gateway 为 127.0.0.1:18080,doctor 为 127.0.0.1:18081。SNI 与区域一一对应,跨区切换只动入口策略,不动应用进程。
| 模块 | 职责 | 失败后第一定位点 |
|---|---|---|
| nginx stream | TLS 入口、按 SNI 分流 | 入口机 error log 与 upstream 超时 |
| OpenClaw gateway | 业务请求接入 | worker 本机 18080 健康响应 |
| OpenClaw doctor | 深度诊断状态 | worker 本机 18081 与队列指标 |
| 聚合器 | status/doctor 合并摘要 | 区域键冲突与时间桶聚合逻辑 |
stream 配置片段:只做四层、只看 SNI
配置只抓三点:启用 stream + ssl_preread on,SNI 映射区域 upstream,保留默认回退。stream 不看 HTTP 头,路由语义全部放在域名上。
map $ssl_preread_server_name $up {
oc-tyo.example.com oc_tyo;
default oc_failover;
}
server { listen 443; ssl_preread on; proxy_pass $up; }
这就是它和 Traefik/frp 的核心区别:少配置面,换确定性。
证书与令牌:TLS 终止和应用鉴权分离
OpenClaw v2026.5.x 建议把 TLS 和令牌分层:证书负责传输信任,令牌负责业务鉴权,轮换窗口也分开。最关键的是 gateway bind loopback 不能破例,避免 worker 误暴露公网端口。
- 证书清单:域名、颁发源、到期日、自动续签脚本、回滚证书版本。
- 令牌清单:环境范围、生效窗口、轮换负责人、旧令牌失效时间。
- 最小权限:入口机只持有转发所需配置,不持有 OpenClaw 管理密钥。
探针合并:status/doctor 跨区域失败摘要
status 负责可达性,doctor 负责深度状态。聚合器按 {region, 5分钟桶} 合并:同一区域两路连续失败才报警,多区域同类失败再升级全局。这样能显著降低告警风暴。
region、sni、status_ok、doctor_ok、p95_latency_ms、first_seen、last_seen。字段稳定后,跨团队联动会快很多。FAQ:上线前最容易踩的五个坑
Q1:已经有 Traefik,为什么还要 nginx stream?
当你只需要四层 SNI 分流且目标是可复现、低变更面时,stream 更简洁。Traefik 适合复杂七层治理,这不是二选一,而是按场景分层。
Q2:frp 与 stream 怎么选?
有稳定内网链路选 stream;需要穿透与远端映射时选 frp。
Q3:v2026.5.x 上线前必查什么?
确认 gateway/doctor 都是 loopback,SNI 命中正确,status/doctor 合并规则已生效。
落地时建议采用「单区先行、跨区复用」节奏:先在一个区域做完整演练,记录证书更新、令牌轮换、入口回退与告警抑制的执行时长,再把同一脚本复制到其他区域。这样每次变更都能复用同一套观测口径,减少跨团队沟通成本,也便于审计与复盘。