Anti-pattern: definisci più host virtuali con lo stesso alias host e lo stesso numero di porta

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

In Apigee Edge, un router gestisce tutto il traffico API in entrata. Ciò significa che tutte le richieste HTTP e HTTPS a un proxy API Edge vengono prima gestite da un router Edge. Di conseguenza, la richiesta proxy API deve essere indirizzata all'indirizzo IP e alla porta aperta su un router.

Un host virtuale consente di ospitare più nomi di dominio su un singolo server o gruppo di server. Per Edge, i server corrispondono ai router Edge. Definendo gli host virtuali su un router, puoi gestire le richieste a più domini.

Un host virtuale su Edge definisce un protocollo (HTTP o HTTPS), insieme a una porta del router e un alias host. L'alias host è in genere un nome di dominio DNS mappato all'indirizzo IP di un router.

Ad esempio, l'immagine seguente mostra un router con due definizioni di host virtuale:

In questo esempio sono presenti due definizioni di host virtuale. Una gestisce le richieste HTTPS sul dominio domainName1, l'altra le richieste HTTP su domainName2.

In una richiesta a un proxy API, il router confronta l'intestazione Host e il numero di porta della richiesta in entrata con l'elenco di alias host definiti da tutti gli host virtuali per determinare quale host virtuale gestisce la richiesta.

Di seguito è riportata una configurazione di esempio per gli host virtuali:

configurazione vhost di esempio

Antipattern

La definizione di più host virtuali con lo stesso alias host e numero di porta nello stesso ambiente o in ambienti diversi di un'organizzazione o tra organizzazioni genera confusione al momento delle richieste API di routing e può causare errori/comportamenti imprevisti.

Utilizziamo un esempio per spiegare le implicazioni della presenza di più host virtuali con lo stesso alias host.

Considera che esistono due host virtuali sandbox and secure definiti con lo stesso alias host, ad esempio api.company.abc.com in un ambiente:

vhost con lo stesso alias

Con la configurazione descritta sopra, potrebbero verificarsi due scenari, come descritto nelle sezioni seguenti.

Scenario 1 : un proxy API è configurato per accettare richieste solo a una delle sandbox degli host virtuali

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

In questo scenario, quando le applicazioni client effettuano chiamate a un proxy API specifico utilizzando l'alias host api.company.abc.com, riceveranno a intermittenza errori 404 con il messaggio:

Unable to identify proxy for host: secure 

Questo perché il router invia le richieste agli host virtuali sandbox e secure. Quando le richieste vengono instradate all'host virtuale sandbox, le applicazioni client riceveranno una risposta corretta. Tuttavia, quando le richieste vengono instradate all'host virtuale secure, le applicazioni client riceveranno l'errore 404 perché il proxy API non è configurato per accettare richieste sull'host virtuale secure.

Scenario 2 : un proxy API è configurato per accettare richieste sia alla sandbox degli host virtuali sia alla

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

In questo scenario, quando le applicazioni client effettuano le chiamate a un proxy API specifico utilizzando l'alias host api.company.abc.com, riceveranno una risposta valida in base alla logica del proxy.

Tuttavia, questo fa sì che in Analytics vengano archiviati dati errati poiché le richieste API vengono instradate a entrambi gli host virtuali, mentre le richieste effettive miravano a essere inviate a un solo host virtuale.

Ciò può influire anche sulle informazioni di logging e su qualsiasi altro dato basato sugli host virtuali.

Impatto

  1. Errori 404 poiché le richieste API possono essere instradate a un host virtuale a cui il proxy API potrebbe non essere configurato per accettare le richieste.
  2. Dati di Analytics errati poiché le richieste API vengono instradate a tutti gli host virtuali che hanno lo stesso alias host mentre le richieste sono state effettuate solo per un host virtuale specifico.

Best practice

  • Non definire più host virtuali con lo stesso alias host e numero di porta nello stesso ambiente o in ambienti diversi di un'organizzazione.
  • Se è necessario definire più host virtuali, utilizza alias host diversi in ciascuno degli host virtuali, come mostrato di seguito:

    due vhost

Per approfondire