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

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

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 gestite prima da un router Edge. Pertanto, la richiesta del 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 che esegue il mapping 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. Uno gestisce le richieste HTTPS sul dominio domainName1, l'altro gestisce 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 degli 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:

sample vhost config

Antipattern

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

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

Supponiamo che in un ambiente siano definiti due host virtuali sandbox and secure con lo stesso alias host, ovvero api.company.abc.com:

vhost con lo stesso alias

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

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

<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 errori 404 intermittenti 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 indirizzate all'host virtuale sandbox, le applicazioni client riceveranno una risposta positiva. Tuttavia, quando le richieste vengono indirizzate all'host virtuale secure, le applicazioni client riceveranno un errore 404 perché il proxy API non è configurato per accettare richieste sull'host virtuale secure.

Scenario 2 : un proxy API è configurato per accettare richieste a entrambi gli host virtuali sandbox e secure

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
    <VirtualHost>secure</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 una risposta valida in base alla logica del proxy.

Tuttavia, in questo modo i dati vengono memorizzati in modo errato in Analytics, poiché le richieste API vengono indirizzate a entrambi gli host virtuali, mentre le richieste effettive dovevano essere inviate a un solo host virtuale.

Questo può influire anche sulle informazioni di logging e su altri dati basati sugli host virtuali.

Impatto

  1. Errori 404 perché le richieste API potrebbero essere indirizzate a un host virtuale per il quale il proxy API potrebbe non essere configurato per accettare le richieste.
  2. Dati di Analytics errati, poiché le richieste API vengono indirizzate a tutti gli host virtuali con 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