判断マトリクス · 2026

小チーム共有リモートMac:Nginx と Caddy 協働入口の TLS・遅延・運用コスト

2026年4月7日 Meshmac 読了 約6分

CI Webhook・社内ダッシュボード・エージェントの HTTP API など、SSH/VNC 以外HTTPS 入口が要る場面を、共有リモート Mac 上でどう置くかの整理です。NginxCaddy を、証明書の自動更新・設定の複雑さ・WebSocket/長接続・ログとレート制限の伸ばし方まで対照し、workerupstream keepalive の目安つきで最小手順まで落とします。接続方式の土台は SSH/VNC 選型ガイド、権限まわりは 共有ビルドと権限隔離 と併読ください。

チーム共有シナリオとリスク

共有 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_processesauto(または 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 上の最小再現デプロイ手順

  1. バックエンドを先に 127.0.0.1:8080 で起動し、curl -sS http://127.0.0.1:8080/health 等で疎通。
  2. sudo lsof -i :443 で 443 が空いているか確認。占有時は FAQ を参照。
  3. Nginx か Caddy を Homebrew 等で導入し、上記スニペットを /usr/local/etc/nginx/nginx.conf または Caddyfile に配置。
  4. DNS を Mac の公開 IP に向け、ファイアウォールで 443 のみ許可(管理用 SSH は別経路推奨)。
  5. 証明書発行後、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 接続の再利用用であり、クライアント長接続の維持そのものとは別問題です。

MeshMac · 多ノード

入口を揃えたら、プールを複数台に広げる

HTTPS 終端・ワーカ・通知経路をノード間で繰り返し検証するなら、MeshMac のマルチノード構成が運用を単純化しやすいです。料金・プランはログイン不要で公開しています。購入・プラン一覧(goumai)で比較し、ヘルプセンターOpenClaw 特集から接続・自動化の次の一歩へどうぞ。

プランを見る