2026年 OpenClaw Gateway 同機 Nginx/Caddy 反向代理怎麼選?TLS 終結、WebSocket 升級、allowedOrigins 與 trusted-proxy 在獨佔遠端 Mac(SSH 無頭)上的可復現部署矩陣 + FAQ
把「對外 HTTPS/WSS」與「本機 Gateway 程序」拆成穩定邊界:反向代理負責 TLS 與升級,OpenClaw 專心處理會話與工具呼叫;本文用矩陣對齊 Nginx 與 Caddy 在同機、無頭維運下的取捨。
1. 同機部署時,你真正要鎖定的四件事
在獨佔遠端 Mac 上,Gateway 通常綁 127.0.0.1 或內網埠,由反向代理承接 443。此時錯誤很少出在「選了哪套代理」,而出在:對外網域、Origin/Host 是否一致、WebSocket 逾時鏈、以及誰被信任為上游(trusted-proxy)。
若你仍在確認 SSH 無頭上的 Gateway 安裝與埠轉發基線,可先對照 在遠端 Mac mini 上部署 OpenClaw 的 SSH 快速指南 ,再回來調整代理層,避免把「本機可連」誤判成「瀏覽器可連」。
2. Nginx 與 Caddy:可復現決策矩陣(同機、TLS、WS)
下列矩陣假設:單機單 Gateway、對外只有一個 FQDN、證書由代理終結(TLS offload),Gateway 僅 HTTP/WS 迴環。
| 維度 | Nginx | Caddy |
|---|---|---|
| 設定心智負擔 | 指令塊多、但範本成熟;適合已有 Nginx 資產的團隊。 | 預設自動 HTTPS、檔案式站點區塊;適合快速上線與證書自動續期。 |
| TLS/ACME | 常搭配 certbot 或內建模組;續期要納入 launchd/cron 與 reload 劇本。 | 內建 ACME 流程較順;仍需明確綁定對外埠與防火牆放行。 |
| WebSocket 升級 | 以 Upgrade/Connection 與讀取逾時對齊為主;行為可預期。 |
多數場景自動處理升級;仍建議顯式設定逾時與後端 idle。 |
| 可觀測性 | access log 格式高度可自訂;便於餵給 Loki/Vector。 | 結構化日誌與 JSON 可配;團隊需統一欄位契約。 |
| 無頭 Mac 維運 | brew 服務或 launchd 包一層 nginx -t 再 reload,回滾路徑清晰。 |
同樣建議 launchd 管理;注意權限目錄與證書儲存路徑備份。 |
務實結論:若組織已有 Nginx 標準庫與稽核範本,優先 Nginx;若你要在一天內把「HTTPS + WS + 自動證書」跑通,Caddy 通常更快。兩者都能把 Gateway 壓在迴環介面,關鍵是後續 allowedOrigins 與 trusted-proxy 是否與代理行為一致。
3. TLS 終結:把「對外網域」寫進 Runbook 的第一行
TLS 終結後,Gateway 看到的可能是 http://127.0.0.1:PORT。此時瀏覽器端的 Origin 仍是 https://你的網域,而內部轉發若丟失 X-Forwarded-Proto: https,部分應用會誤判為純 HTTP,進而影響 Cookie 安全旗標或重導迴圈。
建議在代理層固定注入:X-Forwarded-Proto、X-Forwarded-Host、(可選)X-Forwarded-Prefix。證書續期失敗時,策略應是「拒絕對外連線」而非悄悄回退自簽,避免客戶端靜默接受錯誤信任鏈。
4. WebSocket 升級:對齊三層逾時
OpenClaw 類閘道常見長連線。請把逾時當成「產品契約」同步到:① 反向代理讀取/傳送逾時;② 作業系統 TCP keepalive(視需要);③ Gateway 自身心跳/閒置關閉策略。只調其中一層會出現「偶發斷線、重連風暴」。
驗收時用真實瀏覽器與 wscat 各跑一次:確認 101 Switching Protocols、以及代理 access log 中升級路徑與後端埠一致。
5. allowedOrigins:與公開 URL 一字不差
最常見故障是「對外是 https://bot.example.com,設定檔卻寫 https://bot.example.com/」或混用 www/apex。瀏覽器 CORS 與部分 Gateway 白名單是字串比對思維,請把正式對外 URL(含 scheme 與埠)寫進設定,並在 Staging 用子網域完整演練一遍。
若你在 Gateway 內還掛了外掛 Hook 做 Tool Call 稽核,記得把「跨來源/內嵌面板」這類入口一併列入白名單演練;可參考 OpenClaw Plugin Hooks 生產落地 把稽核與逾時預算和代理層日誌對起來。
6. trusted-proxy:只信任迴環上的「那一跳」
啟用 trusted-proxy 的意義是:Gateway 願意採信 X-Forwarded-For 等標頭來還原客戶端 IP,以便做日誌、限流或地理策略。若信任範圍過大,內網任一機器都能偽造來源 IP。
同機經典做法是:只把 127.0.0.1/::1 列入信任清單,並禁止外網直連 Gateway 埠。若前面還有 CDN 或 L7 負載,則要改成信任 CDN 的固定出口或 Unix socket 單跳,並同步調整真實 IP 標頭名稱。
7. SSH 無頭上的可復現部署清單(摘要)
- Gateway 只聽迴環;防火牆只放行 443/80 給代理。
- launchd(或受控服務管理)先啟 Gateway,再啟代理,重啟順序寫死。
- 代理設定納入版本庫;變更前
nginx -t或 Caddy 設定驗證指令必跑。 - 用腳本斷言:
curl -I https://網域/health、WS 探針、以及allowedOrigins演練用例。
8. FAQ
Q:能不能讓瀏覽器直連 Gateway 埠省掉代理?
A:生產不建議。你會同時失去標準 TLS 管理、WSS 升級一致性,以及把 Gateway 暴露到非本機介面的攻擊面。
Q:CORS 正常但 WebSocket 仍 403?
A:多數與子協定、Cookie、或代理未轉發 Sec-WebSocket-* 有關;用瀏覽器開發者工具對照代理 access log 與 Gateway 日誌時間戳。
Q:trusted-proxy 開了之後限流失效?
A:檢查是否誤信內網大段;限流應基於「還原後的 IP」還是「直接連線 IP」要在設定與文件兩邊一致聲明。
Q:同機還要跑 CI/模擬器會不會搶埠?
A:用埠配置表與 lsof 基線掃描;把 Gateway 埠段與 CI 埠段在 Runbook 分區。
在 Mac mini 上,閘道與代理更適合長跑
反向代理 + Gateway 屬於典型「低互動、高可用」組合:機器重啟次數少、但要求啟動順序與網路邊界穩定。Apple Silicon Mac mini 在待機功耗與散熱噪音上通常優於同級塔式或自組 PC,適合放在機房或桌下 7×24 提供對外 HTTPS 入口;macOS 與 Homebrew 生態也能讓 Nginx/Caddy 的安裝與 launchd 編排維持可複製。
從安全與總體擁有成本看,Gatekeeper、SIP 與 FileVault 提供清楚基線,統一記憶體架構也有利於同機多程序(代理、Gateway、輕量監控)並存。若你希望把本文的 TLS/WS/白名單策略落在最省心、最省電的硬體上,Mac mini M4 是目前非常值得考慮的起點——現在即可入手,讓對外閘道與代理層真正可稽核、可復現。