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

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Na Apigee Edge, um roteador processa todo o tráfego de API de entrada. Isso significa que todas as solicitações HTTP e HTTPS para um proxy da API Edge são processadas primeiro por um roteador de borda. Portanto, a solicitação de proxy de API precisa ser direcionada para o endereço IP e a porta aberta em um roteador.

Com um host virtual, você pode hospedar vários nomes de domínio em um único servidor ou grupo de servidores. Em relação aos de borda, os servidores correspondem aos roteadores de borda. Ao definir hosts virtuais em um roteador, você pode lidar com solicitações para vários domínios.

Um host virtual no Edge define um protocolo (HTTP ou HTTPS), com uma porta do roteador 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 roteador.

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

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

Em uma solicitação a um proxy de API, o roteador compara o cabeçalho "Host" e o número da porta da solicitação recebida com a lista de aliases de host definida por todos os hosts virtuais para determinar qual host virtual processará a solicitação.

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

exemplo de configuração do 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 ou diferentes de uma organização ou entre organizações gera confusão no momento de encaminhar as 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 para apenas um do sandbox de hosts virtuais

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

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

Unable to identify proxy for host: secure 

Isso ocorre porque o roteador envia as solicitações para os hosts virtuais sandbox e secure. Quando as solicitações forem encaminhadas para o host virtual sandbox, os aplicativos clientes receberão uma resposta bem-sucedida. No entanto, quando as solicitações forem roteadas para o host virtual secure, os aplicativos clientes receberão o erro 404, porque o proxy da 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 tanto para o sandbox de hosts virtuais quanto para os

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

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

No entanto, isso faz com que dados incorretos sejam armazenados no Google Analytics, já que as solicitações de API são roteadas para os dois hosts virtuais, enquanto as solicitações reais são 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 porque as solicitações da API podem ser roteadas para um host virtual em que o proxy da API pode não estar configurado para aceitar as solicitações.
  2. Dados incorretos do Google Analytics, já que as solicitações de API são encaminhadas para todos os hosts virtuais com 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 e número de porta no mesmo ambiente ou em ambientes diferentes de uma organização.
  • Se houver a necessidade de definir vários hosts virtuais, use aliases de host diferentes em cada um deles, conforme mostrado abaixo:

    dois vhosts

Leia mais