メインコンテンツへスキップ
Enclave

リバースプロキシと HTTPS で公開する

証明書付きの nginx 1 台で公開ドメインをメインアプリにリバースプロキシすれば公開完了。ハマりやすい点は 3 つ:WebSocket には Upgrade ヘッダーが必須、CORS と公開アドレスの env を 2 つ更新、X-Admin-Secret ヘッダーは明示的に透過。

  1. 1.メインアプリのドメインをリバースプロキシする

    443 ポートに SSL 証明書を設定し、location / をメインアプリ(Docker モードは http://127.0.0.1:80、ベアメタルは http://127.0.0.1:5180)へプロキシします。重要な 3 行:proxy_http_version 1.1、proxy_set_header Upgrade $http_upgrade、proxy_set_header Connection "upgrade"——どれか 1 つでも欠けると /socket.io の WebSocket アップグレードが 400 で失敗します。フロントエンドのコンテナ/テンプレートが既に /api をバックエンドへ転送しているため、この外側の層で API ルーティングを別途分ける必要はありません。

  2. 2.env を 2 つ更新して api を再起動する

    新しいドメインを api/.env の CORS_ALLOWED_ORIGINS に追加(カンマ区切り)し、PUBLIC_API_BASE_URL をメインアプリの公開ルートアドレス(例 https://app.your-domain.com、/api は付けない)に変更します。変更後は api を再起動して反映。

  3. 3.運用エンドポイントを保護する

    /admin/* はメインアプリと同じバックエンドを通ります。公開インターネットから運用エンドポイントを呼ぶ場合は、ADMIN_SECRET の総当たりを防ぐため IP 許可リストか Basic 認証を追加してください。またプロキシがカスタムヘッダーを明示的に透過するよう確認を:proxy_set_header X-Admin-Secret $http_x_admin_secret;(一部のプロキシは非標準ヘッダーをデフォルトで除去します)。

トラブルシューティング:フロントエンドで Failed to fetch

ブラウザ devtools の Network タブでリクエストを確認:/api リクエストが text/html で返ってきたら、nginx が /api をバックエンドへ転送せず SPA フォールバックに落ちています。CORS エラーなら、CORS_ALLOWED_ORIGINS に今アクセスしているドメインが含まれていません。

トラブルシューティング:WebSocket 400

/socket.io/ の location には Upgrade / Connection ヘッダーを明示し、proxy_http_version 1.1 を指定する必要があります——どれか 1 つ欠けても 400 になります。プロキシが多層の場合はすべての層で必要です。

関連する質問

  • Enclave はセルフホストできますか?難しいですか?
    できます。難易度は普通の web サービスを動かすのと同程度です。docker compose を使ったことがあれば、3 ステップで自分のインスタンスを持てます。リポジトリをクローンし、.env をコピーし、docker compose up するだけ。API・フロントエンド・データベース・ベクトルインデックスはすべて自分のマシン上で動きます。

関連コンテンツ

セルフホスティングドキュメントへ戻る
共有XTelegramLINEWeibo
リバースプロキシと HTTPS で公開する · Enclave