Elastic Load Balancing
Classic Load Balancer

Configurazione delle sticky session per il Classic Load Balancer

Per impostazione predefinita, un Classic Load Balancer instrada ogni richiesta in modo indipendente all'istanza registrata con il carico minore. Tuttavia, è possibile usare la caratteristica sticky session (nota anche come affinità di sessione), che consente al sistema di bilanciamento del carico di associare una sessione utente a un'istanza specifica. Questo garantisce che durante la sessione tutte le richieste dell'utente vengano inviate alla stessa istanza.

La chiave per la gestione delle sticky session consiste nel determinare per quanto tempo il tuo sistema di bilanciamento del carico deve instradare costantemente la richiesta dell'utente alla stessa istanza. Se la tua applicazione ha il proprio cookie di sessione, puoi configurare Elastic Load Balancing in modo che il cookie della sessione rispetti la durata specificata dal cookie della sessione dell'applicazione. Se la tua applicazione non ha un proprio cookie di sessione, puoi configurare Elastic Load Balancing per creare un cookie della sessione specificando la durata della persistenza.

Elastic Load Balancing crea un cookie, denominato AWSELB, che viene utilizzato per mappare la sessione all'istanza.

Requisiti

  • Un sistema di bilanciamento del carico HTTP/HTTPS.

  • Almeno un'istanza integra in ciascuna zona di disponibilità.

Compatibilità

  • L'RFC per il percorso di proprietà di un cookie consente i caratteri di sottolineatura. Tuttavia, l'URI Elastic Load Balancing codifica i caratteri di sottolineatura come %5F, in quanto alcuni browser, ad esempio Internet Explorer 7, prevedono che i caratteri di sottolineatura siano con codifica URI %5F. A causa del potenziale impatto sui browser attualmente in funzione, Elastic Load Balancing continua ad applicare la codifica URI ai caratteri di sottolineatura. Ad esempio, se il cookie presenta la proprietà path=/my_path, Elastic Load Balancing modifica questa proprietà nella richiesta inoltrata a path=/my%5Fpath.

  • Non è possibile impostare il flag secure o HttpOnly sui cookie di persistenza della sessione basati sulla durata. Tuttavia, questi cookie non contengono informazioni sensibili. Se si imposta il flag secure o il flag HttpOnly per un cookie di persistenza della sessione controllato da applicazione, questo viene impostato anche per il cookie AWSELB.

  • Se nel campo Set-Cookie di un cookie di applicazione è presente un punto e virgola finale, il sistema di bilanciamento del carico ignora il cookie.

Persistenza della sessione basata sulla durata

Il sistema di bilanciamento del carico utilizza un cookie speciale per monitorare l'istanza per ogni richiesta a ciascun listener. Quando il sistema di bilanciamento del carico riceve una richiesta, verifica innanzitutto se questo cookie è presente nella richiesta. In questo caso, la richiesta viene inviata all'istanza specificata nel cookie. Se non sono presenti cookie, il sistema di bilanciamento del carico sceglie un'istanza in base all'algoritmo di bilanciamento del carico esistente. Viene inserito un cookie nella risposta per le richieste successive vincolanti dallo stesso utente a quell'istanza. La configurazione della policy di persistenza definisce la scadenza di un cookie, che stabilisce la durata della validità per ciascun cookie. Il sistema di bilanciamento del carico non aggiorna il periodo di scadenza del cookie e non verifica se il cookie è scaduto prima di utilizzarlo. Una volta scaduto un cookie, la sessione non è più una sticky session. Il client deve rimuovere il cookie dal rispettivo archivio alla scadenza.

Se un'istanza non riesce o diventa non integra, il sistema di bilanciamento del carico interrompe l'instradamento delle richieste a quell'istanza e sceglie una nuova istanza integra in base all'algoritmo del sistema di bilanciamento del carico esistente. La richiesta viene instradata alla nuova istanza, come se non vi fosse alcun cookie e la sessione non è più una sticky session.

Se un client passa a un listener con una porta di back-end diversa, la persistenza viene persa.

Per abilitare le sticky session basate sulla durata per un sistema di bilanciamento del carico utilizzando la console

  1. Apri la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, sotto LOAD BALANCING (Bilanciamento del carico), scegli Load Balancers (Sistemi di bilanciamento del carico).

  3. Seleziona il sistema di bilanciamento del carico.

  4. Nella scheda Descrizione scegliere Edit stickiness (Modifica persistenza).

  5. Nella pagina Edit stickiness (Modifica persistenza) selezionare Enable load balancer generated cookie stickiness (Abilita persistenza cookie generato dal sistema di bilanciamento del carico).

  6. (Facoltativo) Per Expiration Period (Periodo di scadenza), digitare il periodo di scadenza del cookie espresso in secondi. Se non si specifica un periodo di scadenza, la sticky session ha la stessa durata della sessione del browser.

  7. Seleziona Salva.

Per abilitare le sticky session basate sulla durata per un sistema di bilanciamento del carico utilizzando l'AWS CLI

  1. Utilizzare il comando create-lb-cookie-stickiness-policy seguente per creare una policy di persistenza dei cookie generati dal sistema di bilanciamento del carico con un periodo di scadenza dei cookie di 60 secondi:

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. Utilizzare il comando set-load-balancer-policies-of-listener seguente per abilitare la persistenza della sessione per il sistema di bilanciamento del carico specificato:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy

    Nota

    Il comando set-load-balancer-policies-of-listener sostituisce il set di policy corrente associato alla porta del sistema di bilanciamento del carico specificata. Ogni volta che si utilizza il comando, specificare l'opzione --policy-names per elencare tutte le policy da abilitare.

  3. (Facoltativo) Utilizzare il comando describe-load-balancers seguente per verificare che la policy sia abilitata:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    La risposta include le seguenti informazioni, che mostrano che la policy è abilitata per il listener sulla porta specificata:

    { "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-2016-08" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-2016-08" ] }, ... } ] }

Persistenza della sessione controllata dalle applicazioni

Il sistema di bilanciamento del carico utilizza un cookie speciale per associare la sessione all'istanza che ha gestito la richiesta iniziale, ma segue il ciclo di vita del cookie dell'applicazione specificato nella configurazione della policy. Il sistema di bilanciamento del carico inserisce solo un nuovo cookie di persistenza, se la risposta dell'applicazione include un nuovo cookie dell'applicazione. Il cookie di persistenza del sistema di bilanciamento del carico non si aggiorna con ogni richiesta. Se il cookie dell'applicazione viene rimosso esplicitamente o scade, la sessione smette di essere un sticky session fino a quando non viene rilasciato un nuovo cookie dell'applicazione.

Se un'istanza non riesce o diventa non integra, il sistema di bilanciamento del carico interrompe l'instradamento delle richieste a quell'istanza e sceglie una nuova istanza integra in base all'algoritmo del sistema di bilanciamento del carico esistente. Il sistema di bilanciamento del carico tratta la sessione come bloccata sulla nuova istanza integra e continua a instradare le richieste a quell'istanza, anche se l'istanza non riuscita torna indietro.

Per abilitare la persistenza della sessione controllata dall'applicazione utilizzando la console

  1. Apri la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, sotto LOAD BALANCING (Bilanciamento del carico), scegli Load Balancers (Sistemi di bilanciamento del carico).

  3. Seleziona il sistema di bilanciamento del carico.

  4. Nella scheda Descrizione scegliere Edit stickiness (Modifica persistenza).

  5. Nella pagina Edit stickiness (Modifica persistenza) selezionare Enable application generated cookie stickiness (Abilita persistenza cookie generato dall'applicazione).

  6. Per Cookie Name (Nome cookie), digitare il nome del cookie dell'applicazione.

  7. Seleziona Salva.

Per abilitare la persistenza della sessione controllata dall'applicazione utilizzando l'AWS CLI

  1. Utilizzare il comando create-app-cookie-stickiness-policy seguente per creare una policy di persistenza dei cookie generati dall'applicazione:

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. Utilizzare il comando set-load-balancer-policies-of-listener seguente per abilitare la persistenza della sessione per un sistema di bilanciamento del carico:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy

    Nota

    Il comando set-load-balancer-policies-of-listener sostituisce il set di policy corrente associato alla porta del sistema di bilanciamento del carico specificata. Ogni volta che si utilizza il comando, specificare l'opzione --policy-names per elencare tutte le policy da abilitare.

  3. (Facoltativo) Utilizzare il comando describe-load-balancers seguente per verificare che la policy persistente sia abilitata:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. La risposta include le seguenti informazioni, che mostrano che la policy è abilitata per il listener sulla porta specificata:

    { "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-2016-08" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-2016-08" ] }, ... } ] }