TLS 終結 · WebSocket · allowedOrigins · Docker 上線可複核
已經在 VPS 上用 Docker 跑起 OpenClaw、準備掛上真實網域與 HTTPS的工程師,往往卡在「Gateway 該監聽哪裡、TLS 由誰終結、瀏覽器裡 Control UI 為何報跨源或不安全回落」。本文以決策表對比「僅本機回環 + 邊緣反代」與「容器埠直出公網」,給出Caddy 與 Nginx 最小反代片段、WebSocket 與 X-Forwarded 標頭,以及與 allowedOrigins 協同的驗收順序;OOM 與首輪 WASM 等議題留在Docker VPS 排障長文。安裝總覽見v2026.4 安裝指南,生產暴露面清單見多通道加固文,映像回滾見釘選與回滾文。
Docker 場景下,真正上線還包括宿主機防火牆、Publish 只綁 127.0.0.1、憑證鏈是否完整、通道回呼 URL 是否已隨 https 切換。下列清單用於值班分診,細粒度參數仍以你目前版本的官方文件為準。
0.0.0.0 習慣:把 Gateway 直接暴露在公網介面上卻未配套 WAF、頻率限制與稽核,攻擊面陡增。
WebSocket 半程:反代未透傳 Upgrade / Connection,表現為面板瞬時 502 或握手失敗。
Host 與 Origin 漂移:瀏覽器存取網域 A,設定仍寫死 IP 或內網別名,觸發 Control UI 與 API 的跨源保護。
憑證與 DNS 順序:先於 DNS 生效申請憑證、或混用自簽與公網鏈,行動端與自動化用戶端表現不一致。
磁碟與日誌:反代與容器雙路存取日誌若未輪轉,小盤 VPS 在高峰週把 inode 打滿導致「假死」。
升級視窗:無釘選映像時在反代後做滾動切換,若未對齊預發布與回滾順序,會出現新舊 Gateway 行為分叉。
提示:若目前阻塞是 OOM、Exit 137、首輪 WASM 等待或 Control UI allowedOrigins 裝置配對,請優先對照排障對照表,本文不重複記憶體畫像段落。
下列矩陣寫給「第一次把 OpenClaw 從試驗品推到網域名下」的評審:目標是讓 HTTPS、會話通道與可觀測性在同一敘事下可驗收。
| 維度 | 127.0.0.1 Gateway + 反代 TLS | 容器埠直綁公網 |
|---|---|---|
| 最小暴露 | 公網只觸達 443,上游僅本機回環 | 需獨立網路 ACL 與持續埠稽核 |
| 憑證維護 | 集中在 Caddy / Nginx / ACME 一條鏈路 | 應用內或 sidecar 各自維護,易漂移 |
| WebSocket | 由成熟反代模組處理升級與逾時 | 易漏頭,直連除錯掩蓋問題 |
| 可觀測 | 邊緣與上游日誌可分段關聯 request_id | 需自建等價聚合與告警 |
生產第一性原理:讓「能登入面板」與「通道能回頭連到你公布出去的 https 主機名」在同一個驗收表上同時打勾。
18789)若與你本地 overrides 不一致,請全文搜尋設定與 compose,禁止只改反代不改容器監聽。allowedOrigins 需覆蓋瀏覽器實際存取的 https 來源;修改後依排障文順序冷啟驗證,避免快取誤判。下列順序假設 Docker compose 已在僅本機可達的埠上拉起 Gateway;若尚未完成安裝,請先收斂互動精靈與 compose 基線文。
凍結主機名:在憑證申請前確認 A/AAAA 記錄指向目前 VPS,TTL 與維運視窗寫清。
確認 Gateway 綁定:宿主機上 ss -lntp 或同等命令核實監聽是否僅在 127.0.0.1 目標埠。
選擇反代:單機極簡優先 Caddy 自動 HTTPS;需要與存量 Nginx 生態拼接時用 Nginx stream/location 範本。
套用最小片段:見下方塊;將上游替換為文件埠與真實主機名。
對齊通道回呼:IM 或 Webhook 類通道的外部 URL 必須使用同一公網主機名與路徑前綴。
記一條 golden path:從「瀏覽器開啟 https 網域」到「觸發一次無害心跳或 doctor」寫進內部 playbook,便於換班複核。
openclaw.example.com {
encode gzip
reverse_proxy 127.0.0.1:18789
}
server {
listen 443 ssl http2;
server_name openclaw.example.com;
ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:18789;
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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 600s;
}
}
把下列表當作值班便籤:每一行都應能指向具體日誌欄位或命令輸出,避免「感覺網路有問題」式結論。
| 症狀 | 更可疑層次 | 第一動作 |
|---|---|---|
| 僅 https 報錯、http 直連上游正常 | 憑證鏈或 SNI | 用可信用戶端校驗鏈;核對 server_name 與憑證 CN/SAN |
| 頁面靜態可開、即時通道秒斷 | WebSocket 反代逾時 | 提高 read timeout;確認 Upgrade 頭未被清洗 |
| 主控台報跨源或 blocked origin | allowedOrigins 未含 https 來源 | 改寫來源清單並全量重啟相關行程 |
| 外網 curl 502、本機 curl 200 | 反代 upstream 指向舊埠或容器未監聽 127.0.0.1 | 對照 compose 與 publish 映射逐跳追蹤 |
注意:在未讀完多通道加固清單前,不要把 Dashboard 或偵錯埠臨時改成 0.0.0.0 「方便示範」。
下列數字為VPS 單實例常見觀察區間,用於估算磁碟與逾時,不作為廠商 SLA。
proxy_read_timeout 或 Caddy 等價項建議不低於 600 秒;更短會造成假性斷開。df 與 inode。| 角色 | 特徵 | 落地建議 |
|---|---|---|
| 個人側驗 | 流量低、可接受短暫維護 | 單 Caddy 節點 + 單 compose 疊 + 手工變更視窗 |
| 小團隊生產 | 日間多通道線上 | 映像釘選 + 預發布 compose + 反代與 Gateway 分段回滾 |
| 需要接力 Mac / CI | 長任務與簽名並存 | Gateway 固定 VPS,構建移交共享 Mac 池,矩陣見前文互鏈 |
把家用出口或不穩定雲機當唯一入口,會疊加動態 IP、埠風控與不可預期休眠;純自建機房則拉長 TLS 與多地域冗餘熱備的建設週期,難以給通道方可複述的公網入口。
若你需要可持續對外公布 https 入口、並把長心跳 Agent 與 iOS CI 資源池拆開治理,VpsMesh 的 Mac mini 雲端租賃與始終線上 VPS 組合通常是更穩的工程答案:計算與簽名負載可落在合約化節點,Gateway 與邊緣憑證仍由你方依本文 Runbook 收斂,避免「一套機器扛全世界」的隱性單點。