¿AWS ofrece una manera de enrutar el tráfico HTTPS a dos instancias EC2 diferentes en función de la ruta del directorio?

10

Me preguntaba si lo siguiente es posible con las ofertas de AWS.

https://www.example.com/a/-> servido por Apache en la instancia A de EC2

https://www.example.com/b/-> servido por Apache en la instancia B de EC2

Para aclarar, no quiero que los archivos en una ruta de directorio estén en la misma instancia del servidor que los archivos en la otra ruta de directorio.

Entiendo que esto puede ser posible con un proxy de algún tipo, pero existe una solución más fácil con una de las ofertas de AWS.

El EC2 Load Balancer no parece permitir el cambio basado en la ruta del directorio. La ruta 53 funciona en el nivel de DNS, que no tiene información de ruta para devolver IP en función de eso.

Joseph Shih
fuente
El equilibrador de carga EC2 es tan estúpido que no leerá Host:encabezados ni filtrará el tráfico falso. Parece poco probable que agreguen características como las que está solicitando si mirar los encabezados es demasiado trabajo para ellos. Afortunadamente tienen otras opciones.
pollitos

Respuestas:

29

Use AWS Application Load Balancer , que realiza el enrutamiento basado en rutas . Ese segundo enlace es un tutorial sobre cómo hacerlo.

En resumen, configura su ALB como normal, luego sigue estos pasos (copiados del tutorial de AWS):

  • En la pestaña Oyentes , use la flecha para ver las reglas para el oyente y luego elija Agregar regla . Especifique la regla de la siguiente manera:

  • Para Nombre del grupo objetivo , elija el segundo grupo objetivo que creó.

  • Para el patrón de ruta, especifique el patrón exacto que se utilizará para el enrutamiento basado en la ruta (por ejemplo, / img / *). Para obtener más información, consulte Reglas de escucha.

  • Elija Guardar .

Tim
fuente
¡Gracias! Revisé originalmente el EC2 Application Load Balancer, revisé el asistente, pero en realidad nunca creé uno. El asistente no dio una opción de ruta. Como lo señaló el tutorial, primero hay que crearlo y luego editar las reglas.
Joseph Shih
9

Además de la excelente respuesta de Tim, también puede lograr esto con CloudFront .

Primero, cree su distribución , agregando orígenes para la instancia A de EC2 y la instancia B de EC2 (que también podrían ser equilibradores de carga, hosts que no sean de AWS o incluso depósitos S3).

Luego, configure las reglas de comportamiento de la memoria caché para asignar / a / * y / b / * a los orígenes apropiados.

Si tiene sentido o no usar CloudFront para este propósito dependerá de su aplicación y de la necesidad de una CDN.

Zach Lipton
fuente
44
Esto también podría aplicarse si lo desea /a*y /b*puede ser manejado por diferentes servicios, diferentes cuentas, diferentes regiones o incluso una ruta manejada por algo que se ejecuta dentro de AWS y el otro en otro lugar. CloudFront tiene muchos casos de uso que conceptualmente no requieren una CDN en absoluto.
Michael - sqlbot