Antywzorca: zdefiniuj wiele hostów wirtualnych z tym samym aliasem hosta i tym samym numerem portu

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

W Apigee Edge router obsługuje cały przychodzący ruch API. Oznacza to, że wszystkie żądania HTTP i HTTPS do proxy interfejsu API Edge są najpierw obsługiwane przez router Edge. Dlatego żądanie proxy interfejsu API musi być kierowane na adres IP i otwarty port routera.

Wirtualny host umożliwia hostowanie wielu nazw domen na jednym serwerze lub grupie serwerów. W przypadku Edge serwery odpowiadają routerom Edge. Definiując wirtualne hosty na routerze, możesz obsługiwać żądania do wielu domen.

Wirtualny host w Edge definiuje protokół (HTTP lub HTTPS) wraz z portem routera i aliasem hosta. Alias hosta jest zwykle nazwą domeny DNS, która jest mapowana na adres IP routera.

Na przykład na ilustracji poniżej widać router z 2 definicjami wirtualnego hosta:

W tym przykładzie są 2 definicje wirtualnego hosta. Jeden obsługuje żądania HTTPS w domenie domainName1, a drugi żądania HTTP w domainName2.

W przypadku żądania do proxy interfejsu API router porównuje nagłówek Host i numer portu przychodzącego żądania z listą aliasów hostów zdefiniowanych przez wszystkie wirtualne hosty, aby określić, który wirtualny host obsługuje żądanie.

Przykładowe konfiguracje wirtualnych hostów są pokazane poniżej:

przykładowa konfiguracja hosta wirtualnego

Antywzorzec

Zdefiniowanie wielu wirtualnych hostów z tym samym aliasem hosta i numerem portu w tym samym lub różnych środowiskach organizacji albo w różnych organizacjach spowoduje zamieszanie podczas kierowania żądań do interfejsu API i może spowodować nieoczekiwane błędy lub zachowania.

Aby wyjaśnić konsekwencje posiadania wielu wirtualnych hostów z tym samym aliasem hosta, użyjemy przykładu.

Załóżmy, że w środowisku zdefiniowano 2 wirtualne hosty sandbox and secure zdefiniowane z tym samym aliasem hosta, czyli api.company.abc.com:

wirtualne hosty o tym samym aliasie,

W przypadku powyższej konfiguracji mogą wystąpić 2 scenariusze opisane w kolejnych sekcjach.

Scenariusz 1 : proxy interfejsu API jest skonfigurowane tak, aby akceptować żądania tylko do jednego z wirtualnych hostów (sandbox)

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

W tym scenariuszu, gdy aplikacje klienckie wysyłają wywołania do konkretnego proxy interfejsu API za pomocą aliasu hosta api.company.abc.com, będą okresowo otrzymywać błędy 404 z tym komunikatem:

Unable to identify proxy for host: secure 

Dzieje się tak, ponieważ router wysyła żądania do wirtualnych hostów sandbox i secure. Gdy żądania są kierowane do sandbox wirtualnego hosta, aplikacje klienckie otrzymują odpowiedź. Gdy jednak żądania są kierowane do wirtualnego hosta secure, aplikacje klienckie otrzymują błąd 404, ponieważ proxy interfejsu API nie jest skonfigurowane tak, aby akceptować żądania na wirtualnym hoście secure.

Scenariusz 2 : proxy interfejsu API jest skonfigurowane tak, aby akceptować żądania do obu wirtualnych hostów (sandbox i secure)

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

W tym scenariuszu, gdy aplikacje klienckie wysyłają wywołania do konkretnego proxy interfejsu API za pomocą aliasu hosta api.company.abc.com, otrzymują prawidłową odpowiedź na podstawie logiki proxy.

Powoduje to jednak zapisywanie nieprawidłowych danych w Analytics, ponieważ żądania do interfejsu API są kierowane do obu wirtualnych hostów, a w rzeczywistości miały być wysyłane tylko do jednego wirtualnego hosta.

Może to również wpływać na informacje o logowaniu i inne dane oparte na wirtualnych hostach.

Wpływ

  1. Błędy 404, ponieważ żądania do interfejsu API mogą być kierowane do wirtualnego hosta, który nie jest skonfigurowany tak, aby akceptować żądania.
  2. Nieprawidłowe dane Analytics, ponieważ żądania do interfejsu API są kierowane do wszystkich wirtualnych hostów z tym samym aliasem hosta, a żądania były wysyłane tylko do konkretnego wirtualnego hosta.

Sprawdzona metoda

  • Nie definiuj wielu wirtualnych hostów z tym samym aliasem hosta i numerem portu w tym samym środowisku, ani w różnych środowiskach organizacji.
  • Jeśli musisz zdefiniować wiele wirtualnych hostów, użyj różnych aliasów hostów w każdym z nich, jak pokazano poniżej:

    2 hosty wirtualne

Więcej informacji