Impostazione affinità di sessione
Il caricamento di un sito web richiede solitamente il recupero di più risorse da un server web. L'affinità di sessione dell' CIS e riduce al minimo le richieste di rete ridondanti indirizzando automaticamente le richieste provenienti dallo stesso client allo stesso server web di origine.
CIS imposta un cookie sulla risposta iniziale al client. L'utilizzo del cookie nelle successive richieste client garantisce che tali richieste vengano inviate alla stessa origine, a meno che l'origine non sia non disponibile.
Quando abilitata, CIS affinità di sessione effettua quanto segue:
- Quando un client effettua la sua prima richiesta, CIS imposta un cookie
CFLibsul client. Il cookie codifica l'origine a cui viene inoltrata la richiesta. - Le richieste successive dello stesso client vengono inoltrate a tale origine per la durata del cookie e fino a quando il server di origine rimane sano.
- Se il cookie scade o il server di origine è poco sano, CIS imposta un nuovo cookie che codifica l'appropriata origine di failover.
Tutte le sessioni predefinite a 23 ore a meno che non venga specificato un TTL di sessione personalizzato (in secondi) tra 30 minutes e 7 giorni. Per onorare il TTL è necessario un cookie di affinità di sessione. Il cookie di sessione è sicuro
quando è abilitato il " Always Use HTTPS. Inoltre, " HttpOnly è sempre abilitato per il cookie per prevenire gli attacchi di cross-site
scripting.
Impostazione dell'affinità di sessione dalla CLI
Quando si crea un bilanciatore di carico globale dalla CLI, procedere come segue per impostare l'affinità di sessione:
- Accedi al tuo account IBM Cloud.
- Crea un programma di bilanciamento del carico globale.
- Impostare le seguenti variabili CLI:
Se è necessaria una configurazione specifica di SameSite nei cookie di affinità della sessione, CIS consiglia di fornire valori per samesite e secure diversi da Auto, invece di affidarsi al comportamento
predefinito. In questo modo, il valore dell'attributo del cookie SameSite non cambia a causa delle modifiche alla configurazione (ovvero Always Use HTTPS ).
session_affinity: i valori validi sono cookie, none.
ttl: Tempo, in secondi, che intercorre tra la creazione del cookie di affinità di sessione di questo bilanciatore di carico e la sua scadenza. Valori validi tra '1800, '604800. Il valore predefinito è 82800.
session_affinity_attributes: Attributi di un cookie di affinità di sessione.
samesite-
I valori validi sono: *
Auto(predefinito): Se l'opzione Usa sempre HTTPS è attivata, i cookie di affinità di sessione utilizzano la modalitàLax; se è disattivata, i cookie utilizzano la modalitàNone. *None: I cookie vengono inviati con tutte le richieste. *Lax: i cookie vengono inviati solo al dominio apice (ad esempio 'example.com). *Strict: i cookie sono creati dalla prima parte (il dominio visitato). secure-
I valori validi sono: *
Auto(predefinito): Se l'opzione Usa sempre HTTPS è attivata, i cookie di affinità di sessione utilizzanosecurenell'attributosamesite; se è disattivata, i cookie non utilizzanosecure. *Always:secureè sempre impostato, il che significa che il cookie viene inviato solo su connessioni HTTPS. *Neversecurenon viene mai impostato, consentendo l'invio di cookie sia su connessioni HTTPS che HTTP. drain_duration-
Facoltativo. Tempo, espresso in secondi, in cui l'origine svuoterà le sessioni attive. Allo scadere del tempo, tutte le sessioni esistenti vengono terminate, Questo campo viene utilizzato solo quando l'affinità di sessione è abilitata sul bilanciatore di carico.
zero_downtime_failover-
Facoltativo. Invia automaticamente il traffico agli endpoint di un pool in caso di problemi di rete transitori. I valori sono: *
none(predefinito): Non viene effettuato il failover e gli utenti potrebbero ricevere degli errori. *temporary: il traffico viene inviato ad altri endpoint finché non è disponibile l'endpoint originariamente appuntato. *sticky: il cookie di affinità di sessione viene aggiornato e le richieste successive vengono inviate al nuovo endpoint, se necessario.Il failover Sticky Zero-Downtime non è supportato per l'affinità di sessione dall'intestazione HTTP.
Ad esempio:
ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'
Impostazione dell'affinità di sessione con l'API
L'affinità di sessione è una proprietà dei bilanciatori di carico globali, che si può impostare con i seguenti endpoint:
Personalizzare il comportamento dell'affinità di sessione utilizzando i parametri 'session_affinity, 'session_affinity_ttl e 'session_affinity_attributes.
Per abilitare l'affinità di sessione per intestazione HTTP, impostare il valore session_affinity su header e aggiungere i nomi delle intestazioni HTTP a Nomi delle intestazioni HTTP a session_affinity_attributes.headers.
Quando crei un programma di bilanciamento del carico globale utilizzando l'API, attieniti alla seguente procedura per impostare l'affinità di sessione:
-
Configurare l'ambiente API con le variabili corrette.
-
Memorizzare i seguenti valori nelle variabili da utilizzare nel comando API:
session_affinity, che specifica il tipo di affinità di sessione utilizzato dal programma di bilanciamento del carico, a meno che non sia specificato come "none" o "default". I valori validi sono none,cookie,ip_cookie.session_affinity_ttl, che è la durata dell'affinità di sessione.session_affinity_attributesche includono:-
samesiteconfigura l'attributo SameSite sul cookie di affinità. I valori validi sono 'Auto, 'Lax, 'None, 'Strict; default 'Auto. -
secureconfigura l'attributo Secure sul cookie di affinità di sessione. I valori validi sono 'Auto, 'Always, 'Never; il valore predefinito è 'Auto. -
drain_durationè il valore della durata dello svuotamento, in secondi. -
zero_downtime_failover(opzionale) invia automaticamente il traffico agli endpoint di un pool in caso di problemi di rete transitori. I valori sono 'temporarye 'sticky; il valore predefinito è 'none.Il failover Sticky Zero-Downtime non è supportato per l'affinità di sessione dall'intestazione HTTP.
-
-
Quando vengono avviate tutte le variabili, crea il programma di bilanciamento del carico globale con affinità di sessione:
curl -X POST https://api.cis.cloud.ibm.com/v1/:crn/zones/:zone_id/load_balancers -H 'content-type: application/json' -H 'x-auth-user-token: Bearer xxxxxx' -d '{
"description": "",
"proxied": true,
"enabled": true,
"name": "www.example.com",
"session_affinity": "none",
"session_affinity_ttl": 5000,
"steering_policy": "geo",
"fallback_pool": "4112ba6c2974ec43886f90736968e838",
"default_pools": [
"6563ebae141638f92ebbdc4a821bef8c",
"4112ba6c2974ec43886f90736968e838"
],
"pop_pools": {},
"region_pools": {
"EEU": [
"4112ba6c2974ec43886f90736968e838"
],
"ENAM": [
"6563ebae141638f92ebbdc4a821bef8c"
],
"WEU": [
"4112ba6c2974ec43886f90736968e838"
],
"WNAM": [
"6563ebae141638f92ebbdc4a821bef8c"
]
}
}'
Se imposti samesite su None nella tua richiesta API, non puoi impostare secure su Never.