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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

W Apigee Edge router obsługuje cały przychodzący ruch interfejsu API. Oznacza to, że wszystkie żądania HTTP i HTTPS wysyłane do serwera proxy interfejsu Edge API są najpierw obsługiwane przez router brzegowy. Dlatego żądanie serwera proxy interfejsu API musi być kierowane do adresu IP i otwartego portu w routerze.

Host wirtualny umożliwia hostowanie wielu nazw domen na jednym serwerze lub grupie serwerów. W przypadku serwerów Edge odpowiadają routerom brzegowym. Dzięki zdefiniowaniu hostów wirtualnych w routerze możesz obsługiwać żądania wysyłane do wielu domen.

Host wirtualny w Edge definiuje protokół (HTTP lub HTTPS) wraz z portem routera i aliasem hosta. Alias hosta to zwykle nazwa domeny DNS zmapowana na adres IP routera.

Na przykład ta ilustracja przedstawia router z 2 definicjami hostów wirtualnych:

W tym przykładzie mamy 2 definicje hostów wirtualnych. Jedna z nich obsługuje żądania HTTPS w domenie domainName1, a druga obsługuje żądania HTTP z domeny domainName2.

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

Poniżej znajdziesz przykładową konfigurację dla hostów wirtualnych:

przykładowa konfiguracja vhost

Antywzór

Definiowanie wielu hostów wirtualnych z tym samym aliasem hosta i tym samym numerem portu w tym samym/różnych środowiskach w organizacji lub w różnych organizacjach może powodować dezorientację podczas przesyłania żądań do interfejsu API routingu oraz powodować nieoczekiwane błędy i działanie.

Posłużmy się przykładem, który wyjaśnia konsekwencje posiadania wielu hostów wirtualnych z tym samym aliasem hosta.

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

vhosty z takim samym aliasem

W przypadku takiej konfiguracji możliwe są 2 scenariusze, jak opisano w sekcjach poniżej.

Scenariusz 1. Serwer proxy interfejsu API jest skonfigurowany tak, aby przyjmować żądania wysyłane tylko do jednego z piaskownicy hostów wirtualnych

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

W tym scenariuszu, gdy aplikacje klienckie wywołują określony serwer proxy interfejsu API za pomocą aliasu hosta api.company.abc.com, będą sporadycznie otrzymywać błędy 404 z komunikatem:

Unable to identify proxy for host: secure 

Dzieje się tak, ponieważ router wysyła żądania do hostów wirtualnych sandbox i secure. Gdy żądania będą kierowane do hosta wirtualnego sandbox, aplikacje klienckie otrzymają odpowiedź pomyślną. Jednak gdy żądania będą kierowane do hosta wirtualnego secure, aplikacje klienta otrzymają błąd 404, ponieważ serwer proxy interfejsu API nie jest skonfigurowany do akceptowania żądań z hosta wirtualnego secure.

Scenariusz 2 : serwer proxy interfejsu API jest skonfigurowany tak, aby przyjmować żądania zarówno wysyłane do piaskownicy hostów wirtualnych, jak i do bezpiecznych

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

W tym scenariuszu, gdy aplikacje klienckie wywołują określony serwer proxy interfejsu API przy użyciu aliasu hosta api.company.abc.com, otrzymają prawidłową odpowiedź opartą na logice serwera proxy.

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

Może to też wpłynąć na informacje logowania i inne dane oparte na hostach wirtualnych.

Wpływ

  1. Błędy 404, ponieważ żądania do interfejsu API mogą być kierowane do hosta wirtualnego, do którego serwer proxy interfejsu API może nie być skonfigurowany do akceptowania żądań.
  2. Nieprawidłowe dane Analytics, ponieważ żądania do interfejsu API są kierowane do wszystkich hostów wirtualnych z tym samym aliasem hosta, a żądania tylko dotyczące określonego hosta wirtualnego.

Sprawdzona metoda

  • Nie definiuj wielu hostów wirtualnych z tym samym aliasem hosta i tym samym numerem portu w tym samym środowisku ani w różnych środowiskach organizacji.
  • Jeśli musisz zdefiniować wiele hostów wirtualnych, użyj innego aliasu dla każdego z nich w sposób poniżej:

    2 vhosty

Więcej informacji