Antipadrão: definir vários hosts virtuais com o mesmo alias de host e número de porta

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

No Apigee Edge, um router processa todo o tráfego de API recebido. Isso significa que todas as solicitações HTTP e HTTPS para um proxy de API do Edge são processadas primeiro por um router do Edge. Portanto, a solicitação de proxy de API precisa ser direcionada ao endereço IP e à porta aberta em um router.

Um host virtual permite hospedar vários nomes de domínio em um único servidor ou grupo de servidores. Para o Edge, os servidores correspondem aos routers do Edge. Ao definir hosts virtuais em um router, é possível processar solicitações para vários domínios.

Um host virtual no Edge define um protocolo (HTTP ou HTTPS), junto com uma porta do router e um alias de host. O alias de host normalmente é um nome de domínio DNS que é mapeado para o endereço IP de um router.

Por exemplo, a imagem a seguir mostra um router com duas definições de host virtual:

Neste exemplo, há duas definições de host virtual. Uma processa solicitações HTTPS no domínio domainName1 e a outra processa solicitações HTTP em domainName2.

Em uma solicitação para um proxy de API, o router compara o cabeçalho do host e o número da porta da solicitação recebida com a lista de aliases de host definidos por todos os hosts virtuais para determinar qual host virtual processa a solicitação.

Confira abaixo um exemplo de configuração para hosts virtuais:

Exemplo de configuração de vhost

Antipadrão

A definição de vários hosts virtuais com o mesmo alias de host e número de porta em ambientes iguais/diferentes de uma organização ou entre organizações leva à confusão no momento do roteamento de solicitações de API e pode causar erros/comportamentos inesperados.

Vamos usar um exemplo para explicar as implicações de ter vários hosts virtuais com o mesmo alias de host.

Considere que há dois hosts virtuais sandbox and secure definidos com o mesmo alias de host, ou seja, api.company.abc.com em um ambiente:

vhosts com o mesmo alias

Com a configuração acima, pode haver dois cenários, conforme descrito nas seções a seguir.

Cenário 1 : um proxy de API está configurado para aceitar solicitações apenas para um dos hosts virtuais sandbox

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

Nesse cenário, quando os aplicativos cliente fazem chamadas para um proxy de API específico usando o alias de host api.company.abc.com, eles recebem erros 404 intermitentemente com a mensagem:

Unable to identify proxy for host: secure 

Isso ocorre porque o router envia as solicitações para os hosts virtuais sandbox e secure. Quando as solicitações são roteadas para o host virtual sandbox, os aplicativos cliente recebem uma resposta bem-sucedida. No entanto, quando as solicitações são roteadas para o host virtual secure, os aplicativos cliente recebem um erro 404, porque o proxy de API não está configurado para aceitar solicitações no host virtual secure.

Cenário 2 : um proxy de API está configurado para aceitar solicitações para os hosts virtuais sandbox e secure

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

Nesse cenário, quando os aplicativos cliente fazem chamadas para um proxy de API específico usando o alias de host api.company.abc.com, eles recebem uma resposta válida com base na lógica do proxy.

No entanto, isso faz com que dados incorretos sejam armazenados no Analytics, já que as solicitações de API são roteadas para os dois hosts virtuais, enquanto as solicitações reais foram enviadas para apenas um host virtual.

Isso também pode afetar as informações de registro e outros dados baseados nos hosts virtuais.

Impacto

  1. Erros 404, já que as solicitações de API podem ser roteadas para um host virtual em que o proxy de API não está configurado para aceitar as solicitações.
  2. Dados incorretos do Analytics, já que as solicitações de API são roteadas para todos os hosts virtuais que têm o mesmo alias de host, enquanto as solicitações foram feitas apenas para um host virtual específico.

Prática recomendada

  • Não defina vários hosts virtuais com o mesmo alias de host e número de porta no mesmo ambiente, ou em ambientes diferentes de uma organização.
  • Se for necessário definir vários hosts virtuais, use aliases de host diferentes em cada um dos hosts virtuais, conforme mostrado abaixo:

    dois vhosts

Leitura adicional