Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Configuración de sesiones persistentes para el Equilibrador de carga clásico
De forma predeterminada, un equilibrador de carga clásico enruta cada solicitud de manera independiente a la instancia registrada con menor carga. Sin embargo, puede utilizar la característica de sesión persistente (también denominada afinidad de sesión) que permite que el equilibrador de carga vincule una sesión del usuario a una instancia concreta. Con ello se garantiza que todas las solicitudes de ese usuario durante la sesión se envían a la misma instancia.
La clave para administrar las sesiones persistentes consiste en determinar durante cuánto tiempo deberá direccionar el equilibrador de carga la solicitud del usuario a la misma instancia. Si su aplicación tiene su propia cookie de sesión, puede configurar ELB para que la cookie de sesión tenga la duración especificada por la cookie de sesión de la aplicación. Si su aplicación no tiene su propia cookie de sesión, puede configurar ELB para que cree una cookie de sesión especificando su propia duración de permanencia.
ELB crea una cookie, denominada AWSELB, que se utiliza para asignar la sesión a la instancia.
Requisitos
-
Un HTTP/HTTPS balanceador de cargas.
-
Al menos una instancia en buen estado en cada zona de disponibilidad.
Compatibilidad
-
El RFC de la propiedad de ruta de una cookie admite los guiones bajos. Sin embargo, el URI del ELB codifica los caracteres de subrayado
%5Fporque algunos navegadores, como Internet Explorer 7, esperan que los guiones bajos estén codificados como URI.%5FDebido a la posibilidad de afectar a los navegadores que funcionan actualmente, el ELB sigue codificando los caracteres de subrayado en el URI. Por ejemplo, si la cookie tiene la propiedadpath=/my_path, ELB cambia esta propiedad en la solicitud reenviada a.path=/my%5Fpath -
No se pueden establecer las marcas
secureniHttpOnlyen las cookies de las sesiones persistentes basadas en duración. Sin embargo, estas cookies no contienen información confidencial. Tenga en cuenta que si establece elsecureindicador o elHttpOnlyindicador en una cookie de persistencia de sesión controlada por la aplicación, también se configurará en la cookie. AWSELB -
Si hay un signo de punto y coma final en el campo
Set-Cookiede una cookie de aplicación, el equilibrador de carga hace caso omiso de la cookie.
Contenido
Persistencia de las sesiones en función de la duración
El balanceador de cargas usa una cookie especial, AWSELB, para rastrear la instancia de cada solicitud dirigida a cada oyente. Cuando el equilibrador de carga recibe una solicitud, primero comprueba si esta cookie está presente en la solicitud. En caso afirmativo, la solicitud se envía a la instancia especificada en la cookie. Si no hay ninguna cookie, el equilibrador de carga elige una instancia en función del algoritmo de balanceo de carga existente. Se inserta una cookie en la respuesta para vincular las solicitudes posteriores del mismo usuario a esa instancia. La configuración de la política de persistencia define el vencimiento de la cookie, que establece el periodo de validez de cada cookie. El equilibrador de carga no actualiza el tiempo de caducidad de la cookie ni comprueba si ha caducado antes de usarla. Una vez que la cookie ha vencido, la sesión ya no es persistente. El cliente debe quitar la cookie de su almacén de cookies una vez caducada.
Con las solicitudes CORS (intercambio de recursos de varios orígenes), algunos navegadores requieren SameSite=None; Secure para habilitar la persistencia. En este caso, ELB crea una segunda cookie de adherencia AWSELBCORS, que incluye la misma información que la cookie de adherencia original más este atributo. SameSite Los clientes reciben ambas cookies.
Si se produce un error en una instancia o esta pasa a encontrarse en mal estado, el equilibrador de carga deja de enrutar las solicitudes a esa instancia y elige una nueva instancia en buen estado en función del algoritmo de equilibrio de carga existente. La solicitud se redirecciona a la nueva instancia como si no hubiera ninguna cookie y la sesión deja de ser persistente.
Si un cliente cambia a un oyente con un puerto backend diferente, la persistencia se pierde.
Para habilitar las sesiones persistentes basadas en duración en un equilibrador de carga desde la consola
Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, en Equilibrio de carga, elija Equilibradores de carga.
-
Seleccione el nombre del equilibrador de carga para abrir su página de detalles.
-
En la pestaña Oyentes, seleccione Administrar oyentes.
-
En la página Administrar oyentes, localice el oyente que desea actualizar y seleccione Editar en Persistencia de cookie.
-
En la ventana emergente Editar la configuración de persistencia de las cookies, seleccione Generado por el equilibrador de cargas.
-
(Opcional) En Periodo de vencimiento, escriba el periodo de vencimiento de la cookie en segundos. Si no especifica un periodo de vencimiento, la sesión persistente durará lo mismo que la sesión del navegador.
-
Seleccione Guardar cambios para cerrar la ventana.
-
Seleccione Guardar cambios para volver a la página de detalles del equilibrador de carga.
Para habilitar las sesiones persistentes basadas en duración en un equilibrador de carga desde la AWS CLI
-
Usa el siguiente comando create-lb-cookie-stickiness-policy para crear una política de adherencia de cookies generada por un balanceador de carga con un período de caducidad de 60 segundos:
aws elb create-lb-cookie-stickiness-policy --load-balancer-namemy-loadbalancer--policy-namemy-duration-cookie-policy--cookie-expiration-period 60 -
Usa el siguiente comando set-load-balancer-policies-of-listener para habilitar la adherencia de la sesión en el balanceador de cargas especificado:
aws elb set-load-balancer-policies-of-listener --load-balancer-namemy-loadbalancer--load-balancer-port443--policy-namesmy-duration-cookie-policynota
El comando
set-load-balancer-policies-of-listenerreemplaza el conjunto actual de políticas asociadas con el puerto del equilibrador de carga especificado. Cada vez que se utiliza el comando, debe especificar la opción--policy-namespara enumerar todas las políticas que hay que habilitar. -
(Opcional) Usa el siguiente describe-load-balancerscomando para comprobar que la política esté habilitada:
aws elb describe-load-balancers --load-balancer-namemy-loadbalancerLa respuesta incluye la siguiente información, que muestra que la política está habilitada para el oyente en el puerto especificado:
{ "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-duration-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }
Persistencia de las sesiones controlada por la aplicación
El equilibrador de carga utiliza una cookie especial para asociar la sesión con la instancia que controló la solicitud inicial, pero respeta la vida útil de la cookie de aplicación especificada en la configuración de la política. El equilibrador de carga solo inserta una nueva cookie de persistencia si la respuesta de la aplicación incluye una nueva cookie de aplicación. La cookie de persistencia del equilibrador de carga no se actualiza con cada solicitud. Si la cookie de aplicación se elimina de forma explícita o vence, la sesión deja de ser persistente hasta que se emite una nueva cookie de aplicación.
Los siguientes atributos establecidos por instancias backend se envían a los clientes en la cookie: path, port, domain, secure, httponly, discard, max-age, expires, version, comment, commenturl y samesite.
Si se produce un error en una instancia o esta pasa a encontrarse en mal estado, el equilibrador de carga deja de enrutar las solicitudes a esa instancia y elige una nueva instancia en buen estado en función del algoritmo de equilibrio de carga existente. El equilibrador de carga trata la sesión como si estuviera "pegada" a la nueva instancia en buen estado y continúa direccionando las solicitudes a esa instancia aunque la instancia que sufrió el error vuelva a estar en buen estado.
Para habilitar las sesiones persistentes controladas por la aplicación desde la consola
Abre la EC2 consola de Amazon en https://console.aws.amazon.com/ec2/
. -
En el panel de navegación, en Equilibrio de carga, elija Equilibradores de carga.
-
Seleccione el nombre del equilibrador de carga para abrir su página de detalles.
-
En la pestaña Oyentes, seleccione Administrar oyentes.
-
En la página Administrar oyentes, localice el oyente que desea actualizar y seleccione Editar en Persistencia de cookie.
-
Seleccione Generada por la aplicación.
-
En Cookie name (Nombre de cookie), escriba el nombre de la cookie de la aplicación.
-
Seleccione Save changes (Guardar cambios).
Para habilitar la persistencia de las sesiones controlada por la aplicación mediante el AWS CLI
-
Utilice el siguiente comando create-app-cookie-stickiness-policy para crear una política de adherencia de las cookies generada por la aplicación:
aws elb create-app-cookie-stickiness-policy --load-balancer-namemy-loadbalancer--policy-namemy-app-cookie-policy--cookie-namemy-app-cookie -
Usa el siguiente comando set-load-balancer-policies-of-listener para habilitar la adherencia de la sesión en un balanceador de cargas:
aws elb set-load-balancer-policies-of-listener --load-balancer-namemy-loadbalancer--load-balancer-port443--policy-namesmy-app-cookie-policynota
El comando
set-load-balancer-policies-of-listenerreemplaza el conjunto actual de políticas asociadas con el puerto del equilibrador de carga especificado. Cada vez que se utiliza el comando, debe especificar la opción--policy-namespara enumerar todas las políticas que hay que habilitar. -
(Opcional) Usa el siguiente describe-load-balancerscomando para comprobar que la política fija esté habilitada:
aws elb describe-load-balancers --load-balancer-namemy-loadbalancer -
La respuesta incluye la siguiente información, que muestra que la política está habilitada para el oyente en el puerto especificado:
{ "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-app-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }