services elb balancer aws amazon-web-services load-balancing amazon-elb

amazon-web-services - elb - aws load balancer redirect http to https



¿Puede ELB redirigir la solicitud según la URL? (3)

Estoy intentando configurar mi servidor de aplicaciones detrás de Amazon Elastic Load Balancer. Estoy pensando en tener un servidor dedicado para la versión anterior y todos los demás servidores dedicados a la nueva versión. Estoy pensando en implementar esto usando el ID de versión en el parámetro de ruta

p.ej

Versión actual (3.0): http://example.com/APPNAME/service

Versión anterior (2.2): http://example.com/APPNAME/v2.2/service

Me gustaría saber:

  1. ¿ELB tiene la capacidad de ver la solicitud HTTP?
  2. ¿Puede ELB redirigir la solicitud según el parámetro de ruta URL?

Actualización 2017-04-05

Después de lanzar el nuevo Application Load Balancer con soporte de enrutamiento basado en ruta el verano pasado (consulte la actualización anterior), AWS ahora también ha agregado soporte de enrutamiento basado en host para equilibradores de carga de aplicaciones AWS :

[...] Ahora puede crear reglas de Application Load Balancer que enrutan el tráfico entrante según el nombre de dominio especificado en el encabezado del Host . Las solicitudes para api.example.com se pueden enviar a un grupo objetivo, las solicitudes a mobile.example.com a otra, y todas las demás (por medio de una regla predeterminada) se pueden enviar a un tercero. También puede crear reglas que combinen el enrutamiento basado en host y el enrutamiento basado en rutas. Esto le permitiría enrutar las solicitudes a api.example.com/production y api.example.com/sandbox a distintos grupos objetivo.

Actualización 2016-08-11

AWS acaba (11 de agosto de 2016) lanzó un nuevo Application Load Balancer para el servicio Elastic Load Balancing , diseñado para mejorar la flexibilidad y el rendimiento de las aplicaciones en tiempo real, los microservicios, las arquitecturas basadas en contenedores y las aplicaciones de transmisión :

Este nuevo equilibrador de carga , que también es compatible con el protocolo WebSocket y HTTP / 2, opera en la capa de aplicación y proporciona soporte de enrutamiento basado en contenido . Esto permite que Application Load Balancer envíe solicitudes a través de múltiples servicios o contenedores que se ejecutan en una o más instancias de Amazon Elastic Compute Cloud (Amazon EC2), lo que ayuda a reducir costos y simplificar el descubrimiento de servicios. [énfasis mío]

Como se destaca en la publicación introductoria del blog , esta nueva opción Application Load Balancer para ELB [...] se ejecuta en Layer 7 y admite una serie de funciones avanzadas [donde] la opción original (ahora llamada Classic Load Balancer) aún está disponible para usted y continúa ofreciendo la funcionalidad de Capa 4 y Capa 7 .

Más específicamente, ELB ahora es compatible con el escenario actual, ya que cada Load Load Balancer le permite definir hasta 10 reglas basadas en URL para enrutar solicitudes a grupos objetivo (AWS planea darle acceso a otros métodos de enrutamiento a lo largo del tiempo).

Respuesta inicial

Esto no es posible: Amazon ELB principalmente (pero consulte a continuación) proporciona equilibrio de carga de capa de transporte (capa OSI 4) , que basa sus decisiones de equilibrio de carga únicamente en la conexión TCP, pero ignora la carga útil de la aplicación. Este último permitiría el equilibrio de carga de la capa de aplicación (capa 7 de OSI ) , donde la carga útil de la aplicación se tiene en cuenta para las decisiones de equilibrio de carga.

La configuración predeterminada en Amazon ELB en realidad proporciona soporte de nivel de aplicación básico para HTTP / HTTPS / SSL (por ejemplo, terminando conexiones SSL e insertando encabezados X-Forwarded-* ), pero no puede ajustar esta configuración; Dicho de otra manera, ELB realmente investiga la solicitud de HTTP aquí de hecho, pero usted no tiene control sobre el comportamiento de ELB a este respecto.

Esto se explica con más detalle en Elección de los oyentes para su Load Balancer , por ejemplo:

Uso de TCP / SSL (Capa 4) con Equilibrio de carga elástico

Cuando utiliza TCP para las conexiones de front-end y back-end, su equilibrador de carga reenviará la solicitud a las instancias de back-end sin modificar los encabezados . Esta configuración tampoco insertará cookies para la coherencia de la sesión o los encabezados X-Forwarded- *.

[...]

Usar HTTP / HTTPS (Capa 7) con Elastic Load Balancing

Cuando utiliza HTTP (capa 7) para las conexiones frontales y de fondo, el equilibrador de carga analiza los encabezados de la solicitud y finaliza la conexión antes de volver a enviar la solicitud a la (s) instancia (s) registrada (s) . Esta es la configuración predeterminada proporcionada por Elastic Load Balancing.

[énfasis mío]

La descripción arquitectónica proporciona una ilustración y más detalles también.


Aquí hay una posible solución que he visto. No es tan ideal como usar Nginx Plus nativo para balanceo de carga, pero si necesita usar ELB, funciona.

Imaginemos una arquitectura como esta:

ELB | Server 1 Server 2 Server... (Current) (Current) (Current) / | / Server X (Legacy)

Cada uno de los servidores en la primera capa ejecuta la implementación "actual". También ejecutan Nginx o Apache como un servidor web (esta es generalmente una mejor práctica frente a cualquier aplicación web, IMO) frente a la capa de la aplicación.

Cada uno de los archivos de configuración de Nginx / Apache contiene una línea que comprueba el parámetro URL que indica que se trata de una llamada heredada que envía la solicitud al servidor X. Si no es una llamada heredada, simplemente continúa la solicitud a la aplicación "actual".

La desventaja es que está utilizando unos pocos ciclos en los servidores actuales para realizar un proxy al servidor heredado, pero su arquitectura es bastante simple y tiene un flujo centralizado.


Han pasado años desde que publicó su pregunta, pero Amazon anunció recientemente la Funcionalidad de equilibrio de carga de la aplicación (Capa 7). Esto debería respaldar lo que estás buscando.

Básicamente, puede definir diferentes grupos de destinatarios a los que se enruta el tráfico en función de una "regla" (por ejemplo, patrón de ruta de URL). Las reglas se pueden priorizar según sea necesario.

Ver detalles en https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/