Antipatrón: Define varios hosts virtuales con el mismo alias de host y número de puerto

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

En Apigee Edge, un router controla todo el tráfico de API entrante. Esto significa que todas las solicitudes HTTP y HTTPS a un proxy de API perimetral se manejan primero con un router perimetral. Por lo tanto, la solicitud de proxy de API debe dirigirse a la dirección IP y al puerto abierto en un router.

Un host virtual te permite alojar varios nombres de dominio en un solo servidor o grupo de servidores. En Edge, los servidores corresponden a los routers perimetrales. Cuando defines hosts virtuales en un router, puedes controlar solicitudes a varios dominios.

Un host virtual en Edge define un protocolo (HTTP o HTTPS), junto con un puerto de router y un alias de host. El alias del host suele ser un nombre de dominio DNS que se asigna a la dirección IP de un router.

Por ejemplo, en la siguiente imagen, se muestra un router con dos definiciones de host virtual:

En este ejemplo, hay dos definiciones de host virtual. Uno controla las solicitudes HTTPS en el dominio domainName1, y el otro maneja las solicitudes HTTP en domainName2.

En una solicitud a un proxy de API, el router compara el encabezado y el número de puerto del host de la solicitud entrante con la lista de alias de host definidos por todos los hosts virtuales para determinar qué host virtual maneja la solicitud.

A continuación, se muestra la configuración de ejemplo de los hosts virtuales:

ejemplo de configuración de vhost

Antipatrón

Definir varios hosts virtuales con el mismo alias de host y número de puerto en los mismos entornos de una organización o entre organizaciones generará confusión en el momento de enrutar las solicitudes a la API y puede causar errores o comportamientos inesperados.

Usemos un ejemplo para explicar las implicaciones de tener múltiples hosts virtuales con el mismo alias de host.

Considera que hay dos hosts virtuales sandbox and secure definidos con el mismo alias de host, es decir, api.company.abc.com en un entorno:

vhosts con el mismo alias

Con la configuración anterior, podría haber dos situaciones, como se describe en las secciones siguientes.

Situación 1 : un proxy de API se configura para aceptar solicitudes a solo una de las zonas de pruebas de los hosts virtuales

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

En esta situación, cuando las aplicaciones cliente realizan las llamadas a un proxy de API específico con el alias del host api.company.abc.com, obtendrán errores 404 de forma intermitente con el mensaje:

Unable to identify proxy for host: secure 

Esto se debe a que el router envía las solicitudes a los hosts virtuales sandbox y secure. Cuando las solicitudes se enrutan al host virtual sandbox, las aplicaciones cliente obtendrán una respuesta exitosa. Sin embargo, cuando las solicitudes se enrutan al host virtual secure, las aplicaciones cliente recibirán el error 404, ya que el proxy de API no está configurado para aceptar solicitudes en el host virtual secure.

Situación 2 : un proxy de API se configura para aceptar solicitudes a la zona de pruebas del host virtual y a las

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

En esta situación, cuando las aplicaciones cliente realizan las llamadas a un proxy de API específico con el alias del host api.company.abc.com, obtendrán una respuesta válida basada en la lógica del proxy.

Sin embargo, esto provoca que se almacenen datos incorrectos en Analytics, ya que las solicitudes a la API se enrutan a ambos hosts virtuales, mientras que las solicitudes reales se enviaron a un solo host virtual.

Esto también puede afectar la información de registro y cualquier otro dato basado en los hosts virtuales.

Impacto

  1. Errores 404, ya que las solicitudes a la API pueden enrutarse a un host virtual en el que el proxy de API puede no estar configurado para aceptar las solicitudes.
  2. Los datos de Analytics no son correctos, ya que las solicitudes a la API se enrutan a todos los hosts virtuales que tienen el mismo alias de host, mientras que las solicitudes se realizaron solo para un host virtual específico.

Práctica recomendada

  • No definas varios hosts virtuales con el mismo alias de host y número de puerto en el mismo entorno o en entornos diferentes de una organización.
  • Si es necesario definir varios hosts virtuales, usa diferentes alias de host en cada uno de ellos, como se muestra a continuación:

    dos vhosts

Lecturas adicionales