チーム共有シナリオとリスク
共有 Mac では「ビルド用デーモン」「OpenClaw ゲートウェイ」「簡易ステータス UI」が同じ OS ユーザーまたは別ユーザーで同居しがちです。HTTPS 入口を足すと、(1) 証明書の有効期限と更新失敗、(2) 443 の単一占有、(3) 長時間 SSE/WebSocket によるワーカ占有、(4) ログにトークンが混ざる、(5) レート制限なき公開でスキャン負荷が典型リスクになります。SSH は管理、VNC は GUI、HTTPS は「外向きに最小の面だけ開く」役に切り分けると説明責任が楽です。多ノードに広げる境界は マルチノードデプロイガイド で揃えると、入口とワーカの責務が追いやすくなります。
Nginx と Caddy の対照マトリクス
遅延そのものはどちらも TLS 終端+プロキシ1ホップが主で差は小さく、差が出るのは運用の手間とモジュール拡張の慣れです。
| 観点 | Nginx | Caddy |
|---|---|---|
| 証明書自動化 | certbot 等と連携、renew フックで reload。手順は定番だがファイルが増える | 既定で ACME 取得・更新が簡潔。単一 Caddyfile で完結しやすい |
| 設定複雑度 | include 分割・upstream・map が強力。大規模ほど向く | 小〜中規模は短い。高度ルールは Nginx より選択肢が狭い場合あり |
| WebSocket/長接続 | Upgrade ヘッダと proxy_read_timeout 明示が定石 |
reverse_proxy と transport の read_timeout で同等に制御可 |
| ログ・レート制限の拡張 | limit_req、アクセスログ整形、OpenTracing 連携など実績多い |
基本機能は十分。細かいモジュール欲は Nginx 寄りの判断も |
| TLS 更新失敗時の運用コスト | cron+reload の監視を自前で組む | 内蔵更新のログ監視で済むことが多い |
| 体感レイテンシ | 同一マシン上のループバックなら両者とも概ね同等(μs〜ms 級の差) | 同上。ボトルネックはアプリとディスク I/O のことが多い |
選定のコツは「チームにとっての変更頻度」です。ドメインやルートが週次で増えるなら Caddy の短い設定が速く、既存の Nginx テンプレや WAF 連携があるなら Nginx 一本が学習コストを抑えます。どちらも TLS 終端だけ担わせ、アプリは必ずループバックに寄せると、将来 MeshMac でノードを足したときに「入口の型」をコピペで横展開しやすくなります。
閾値の目安(共有 Mac・小トラフィック):worker_processes は auto(または vCPU と同数)。worker_connections は 1024 起算でよく、長接続や大量通知が乗るなら 2048〜4096 を検討。upstream keepalive は同時接続ピークのおおよそ 1/4〜1/2 を上限目安に 16〜64(バックエンドが HTTP/1.1 の keep-alive に対応していることが前提)。proxy_read_timeout や Caddy の read_timeout は、SSE やビルドログのストリームなら 3600s 前後、通常の JSON API なら 60〜120s で足りるケースが多いです。
コピー用設定スニペット
バックエンド例:127.0.0.1:8080。本番ドメインと証明書パスは環境に合わせて置換してください。
Nginx(抜粋)
worker_processes auto;
events { worker_connections 2048; }
http {
upstream app_local {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 443 ssl http2;
server_name mac.example.com;
ssl_certificate /etc/letsencrypt/live/mac.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mac.example.com/privkey.pem;
location / {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
proxy_pass http://app_local;
}
}
}
Caddy(抜粋)
mac.example.com {
reverse_proxy 127.0.0.1:8080 {
transport http {
keepalive 32
read_timeout 3600s
}
}
}
Nginx で WebSocket だけ Connection "upgrade" にしたい場合は map で分岐する定石があります。共有機ではログに Authorization を出さないよう access_log フォーマットを絞ることを推奨します。
リモート Mac 上の最小再現デプロイ手順
- バックエンドを先に
127.0.0.1:8080で起動し、curl -sS http://127.0.0.1:8080/health等で疎通。 sudo lsof -i :443で 443 が空いているか確認。占有時は FAQ を参照。- Nginx か Caddy を Homebrew 等で導入し、上記スニペットを
/usr/local/etc/nginx/nginx.confまたはCaddyfileに配置。 - DNS を Mac の公開 IP に向け、ファイアウォールで 443 のみ許可(管理用 SSH は別経路推奨)。
- 証明書発行後、
nginx -s reloadまたは Caddy の graceful reload。更新失敗アラート(期限30日未満等)を1本化。
FAQ(443 占有・リバプロ先)
Q: 443 がすでに別プロセスに取られている
A: 同一ホストでは TLS 終端は1つにまとめるのが安全です。止められない場合は、手前にクラウド LB や別 VM のリバプロを置き、Mac 側は閉域ポートのみ開ける構成に切り替えてください。
Q: バックエンドは Docker? ホスト直?
A: 共有 Mac では 127.0.0.1 のローカルソケットが分かりやすいです。Docker なら published port をループバックにバインドし、リバプロからは常にループバックのみ参照すると権限境界が明確です。
Q: WebSocket がすぐ切れる
A: 中間のタイムアウト(ここでは 3600s 例)と、バックエンド側のアイドル切断の両方を確認してください。keepalive は upstream 接続の再利用用であり、クライアント長接続の維持そのものとは別問題です。
入口を揃えたら、プールを複数台に広げる
HTTPS 終端・ワーカ・通知経路をノード間で繰り返し検証するなら、MeshMac のマルチノード構成が運用を単純化しやすいです。料金・プランはログイン不要で公開しています。購入・プラン一覧(goumai)で比較し、ヘルプセンターと OpenClaw 特集から接続・自動化の次の一歩へどうぞ。