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:
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:
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
- 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.
- 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:
