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

Apigee Edge では、受信されるすべての API トラフィックを Router が処理します。つまり、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 ヘッダーとポート番号を、すべての仮想ホストで定義されたホスト エイリアスのリストと照合して、どの仮想ホストがリクエストを処理するかを決定します。

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

仮想ホストの構成例

アンチパターン

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

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

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

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

この環境では、以下に説明する 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 つの仮想ホスト

関連情報