メインコンテンツへ移動

システムに複数のアクセス先を設定する

背景​

実際の運用では、複数のドメイン名やアドレス(example.example.com、new.example.com など)から同じシステムにアクセスする必要が生じる場合があります。

ただし、システム内部のルーティングやセキュリティ機構により、新しいアクセス先をそのままメインアドレスへリバースプロキシすると、セッション検証の失敗やページリソースの読み込みエラーが発生します。

このドキュメントでは、複数のアドレスから安全かつ安定してアクセスできるようにするための設定を説明します。

基本的な仕組み​

複数のアクセス先からのリクエストを正しく処理するには、バックエンドが各リクエストの「実際のアクセス先」を識別できる必要があります。次の3つを組み合わせて設定します。

  1. 転送先の統一:すべての追加アドレスへのリクエストを、Nginx などのリバースプロキシからコンテナ内の専用ポート 18880 へ転送します。

  2. アクセス先の通知(pdaddr):リバースプロキシの設定に、pdaddr という HTTP リクエストヘッダーを追加します。値にはクライアントが実際に要求した完全なアドレスを指定し、バックエンドに明示します。

  3. アドレスの許可リスト:すべての追加アクセス先を環境変数 ENV_ADDRESS_ALLOWLIST に登録し、システムが有効なアドレスか検証できるようにします。

これにより、システムは異なるアドレスからのリクエストを識別・処理し、正しいリソース URL を動的に生成できるため、各機能が正常に動作します。

設定手順​

  1. docker-compose.yaml の app サービスの ports にポートマッピングを追加し、コンテナ内の 18880 ポートを公開します。

    - 18880:18880
  2. app サービスの environment に環境変数を追加し、追加アクセス先を値に設定します。複数のアドレスは半角カンマで区切ります。

    ENV_ADDRESS_ALLOWLIST: "https://example2.domain.com"
  3. インストール管理ツールのディレクトリでサービスを再起動し、設定を反映します。

    bash ./service.sh restartall
  4. nginx の設定で、新しいアクセス先からマイクロサービスの 18880 ポートへリバースプロキシを設定します。

    nginx のリバースプロキシ設定ファイルの例:

  5. nginx 設定ファイルの localtion に proxy_set_header pdaddr を追加し、システムのアクセス先を指定します。

    設定例:

    location / {
    set $real_ip '';
    if ($http_x_real_ip) {
    set $real_ip $http_x_real_ip;
    }
    if ($http_x_real_ip = '') {
    set $real_ip $remote_addr;
    }
    proxy_set_header X-Real-IP $real_ip;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://hdp;
    proxy_set_header pdaddr https://example2.domain.com; # 追加。実際の追加アクセス先に変更
    }

    location ~ /mds2 {
    proxy_set_header Host $http_host;
    proxy_hide_header X-Powered-By;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://hdp;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header pdaddr https://example2.domain.com; # 追加。実際の追加アクセス先に変更
    }

    location ~ ^/(agent|api/workflow/api/sse/chat) {
    set $md_real_ip '';
    if ($http_x_real_ip) {
    set $md_real_ip $http_x_real_ip;
    }
    if ($http_x_real_ip = '') {
    set $md_real_ip $remote_addr;
    }

    proxy_buffering off;
    proxy_read_timeout 30m;
    proxy_send_timeout 30m;
    client_max_body_size 16m;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $md_real_ip;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-HTTP-Method-Override "";
    proxy_set_header pdaddr https://example2.domain.com; # 追加。実際の追加アクセス先に変更
    proxy_pass http://hdp;
    proxy_redirect default;
    }
  6. nginx を再読み込みすると、新しいアクセス先からシステムを利用できます。