アンチパターン: 同一のホスト エイリアスとポート番号を持つ複数の仮想ホストを定義する

Apigee Edge では、Router は受信するすべての API トラフィックを処理します。つまり、Edge API プロキシに対するすべての HTTP および HTTPS リクエストは、最初に Edge Router によって処理されます。したがって、API プロキシ リクエストは、Router 上の IP アドレスと開かれたポートに転送される必要があります。

仮想ホストを使用すると、1 つのサーバーまたはサーバー グループ上に複数のドメイン名をホストできます。Edge の場合、サーバーは Edge Router に対応付けられます。Router で仮想ホストを定義することによって、複数のドメインに対するリクエストを処理できます。

Edge の仮想ホストでは、プロトコル(HTTP または HTTPS)と、Router のポートおよびホスト エイリアスが定義されます。ホスト エイリアスは、通常は Router の IP アドレスにマッピングされる DNS ドメイン名です。

たとえば、次の図は 2 つの仮想ホスト定義がある Router を示しています。

この例では、2 つの仮想ホストが定義されています。一方がドメイン domainName1 で HTTPS リクエストを処理し、他方が domainName2 で HTTP リクエストを処理します。

API プロキシがリクエストを受信すると、Router は受信したリクエストの Host ヘッダーとポート番号を、すべての仮想ホストによって定義されたホスト エイリアスのリストに照合して、どの仮想ホストがリクエストを処理するかを決定します。

次に、仮想ホストの構成例を示します。

仮想ホストの構成例

アンチパターン

組織内、または組織間での同一の環境または異なる環境において、同じホスト エイリアスとポート番号を持つ仮想ホストを複数定義すると、API リクエストのルーティングで混乱が生じ、予期しないエラーや動作につながる可能性があります。

次の例で、同一のホスト エイリアスを持つ複数の仮想ホストが存在する場合の影響について考えてみましょう。

同一のホスト エイリアス api.company.abc.com が定義された、sandbox and secure という 2 つの仮想ホストが同じ環境内にあるとします。

同一のエイリアスを持つ仮想ホスト

この環境では、以下に説明する 2 つのシナリオが考えられます。

シナリオ 1: どちらか 1 つの仮想ホストのみ(sandbox)でリクエストを受信するように API プロキシを構成する

<ProxyEndpoint name="default">
      ...
      <HTTPProxyConnection>
        <BasePath>/demo</BasePath>
        <VirtualHost>sandbox</VirtualHost>
      </HTTPProxyConnection>
      ...
    </ProxyEndpoint>
    

このシナリオでは、クライアント アプリケーションがホスト エイリアス api.company.abc.com を使用してこの API プロキシを呼び出そうとすると、間欠的に 404 エラーが発生し、次のメッセージが表示されます。

Unable to identify proxy for host: secure 

これは、Router がリクエストを sandboxsecure の両方の仮想ホストに送信しているためです。リクエストが sandbox 仮想ホストにルーティングされた場合は、クライアント アプリケーションに正常なレスポンスが返されます。しかし、リクエストが secure 仮想ホストにルーティングされた場合は、この API プロキシは secure 仮想ホストでリクエストを受信するように構成されていないため、クライアント アプリケーションに 404 エラーが返されます。

シナリオ 2: 両方の仮想ホスト(sandbox、secure)でリクエストを受信するように API プロキシを構成する

<ProxyEndpoint name="default">
      ...
      <HTTPProxyConnection>
        <BasePath>/demo</BasePath>
        <VirtualHost>sandbox</VirtualHost>
        <VirtualHost>secure</VirtualHost>
      </HTTPProxyConnection>
      ...
    </ProxyEndpoint>
    

このシナリオでは、クライアント アプリケーションがホスト エイリアス api.company.abc.com を使用してこの API プロキシを呼び出そうとすると、プロトコルのロジックに基づく有効なレスポンスが返されます。

しかし、この場合は API リクエストが両方の仮想ホストにルーティングされるのに対し、実際のリクエストは 1 つの仮想ホストのみへの送信を想定されているため、不適切なデータがアナリティクスに保存されてしまいます。

この影響は情報のロギングにもおよび、仮想ホストに基づく他のすべてのデータにも影響する可能性があります。

影響

  1. API プロキシ上で、リクエストを受信するように構成されていない可能性のある仮想ホストに API リクエストが送信され、404 エラーが生じる場合があります。
  2. 実際の API リクエストは 1 つの仮想ホストのみへの送信を想定されていたにもかかわらず、同じホスト エイリアスを持つすべての仮想ホストにルーティングされてしまい、アナリティクスに不適切なデータが保存される可能性があります。

ベスト プラクティス

  • 同じホスト エイリアスとポート番号を持つ複数の仮想ホストを、組織の 1 つの環境内または異なる環境間で定義しないようにします。
  • 複数の仮想ホストを定義する必要がある場合は、次に示すように、個々の仮想ホストにそれぞれ異なるホスト エイリアスを使用します。

    2 つの仮想ホスト

関連情報