Définition d'une affinité de session
Le chargement d'un site Web nécessite généralement l'extraction de plusieurs actifs à partir d'un serveur Web. L'affinité de session CIS réduit les demandes de réseau redondantes en dirigeant automatiquement les demandes du même client vers le même serveur Web d'origine.
CIS définit un cookie dans la réponse initiale adressée au client. L'utilisation du cookie dans des demandes client ultérieures permet de s'assurer que ces demandes sont envoyées à la même origine, sauf si cette origine n'est pas disponible.
Une fois activée, la session d'affinité CIS effectue les opérations suivantes :
- Lorsqu'un client soumet sa première demande, CIS définit un cookie
CFLibsur le client. Le cookie encode l'origine vers laquelle la demande est acheminée. - Les demandes ultérieures du même client sont acheminées vers cette origine pendant la durée du cookie et tant que le serveur d'origine reste correct.
- Si le cookie arrive à expiration ou que le serveur d'origine est incorrect, CIS définit un nouveau cookie pour coder l'origine de basculement appropriée.
Par défaut, la durée de toutes les sessions est de 23 heures sauf si une valeur personnalisée de durée de vie (TTL) de session est définie (en secondes) et comprise entre 30 minutes et 7 jours. Un cookie d'affinité de session est nécessaire pour
respecter la valeur de durée de vie (TTL). Le cookie de session est sécurisé lorsque l'option " Always Use HTTPS est activée. En outre, HttpOnly est toujours activé pour le cookie afin d'empêcher les attaques par script intersite.
Définition de l'affinité de session à partir de l'interface CLI
Lorsque vous créez un équilibreur de charge global à partir de l'interface CLI, procédez comme suit pour définir l'affinité de session :
- Connectez-vous à votre compte IBM Cloud.
- Créer un équilibreur de charge global.
- Définissez les variables CLI suivantes :
Si vous avez besoin d'une configuration spécifique de l' SameSite dans vos cookies d'affinité de session, CIS vous recommande de fournir des valeurs pour samesite et secure différentes de Auto, au lieu
de vous fier au comportement par défaut. De cette manière, la valeur de l'attribut du cookie SameSite ne change pas en raison des modifications de configuration (à savoir Always Use HTTPS ).
session_affinity : les valeurs valides sont cookie, none.
ttl: Durée, en secondes, avant l'expiration du cookie d'affinité de session de cet équilibreur de charge après sa création. Valeurs valables entre " 1800 et " 604800. La valeur par défaut est
82800.
session_affinity_attributes: Attributs d'un cookie d'affinité de session.
samesite-
Les valeurs valides sont : *
Auto(par défaut): Si l'option Always Use HTTPS est activée, les cookies d'affinité de session utilisent le modeLax; si elle est désactivée, les cookies utilisent le modeNone. *None: Des cookies sont envoyés avec toutes les demandes. *Lax: les cookies ne sont envoyés qu'au domaine apex (tel que 'example.com). *Strict: les cookies sont créés par la première partie (le domaine visité). secure-
Les valeurs valides sont : *
Auto(par défaut): Si l'option Always Use HTTPS est activée, les cookies d'affinité de session utilisentsecuredans l'attributsamesite; si elle est désactivée, les cookies n'utilisent passecure. *Alwayssecureest toujours activé, ce qui signifie que le cookie n'est envoyé qu'avec des connexions HTTPS. *Never:securen'est jamais défini, ce qui permet d'envoyer des cookies sur des connexions HTTPS et HTTP. drain_duration-
Optionnel. Durée, en secondes, pendant laquelle l'origine drainera les sessions actives. Ce champ n'est utilisé que lorsque l'affinité de session est activée sur l'équilibreur de charge.
zero_downtime_failover-
Optionnel. En cas de problèmes transitoires sur le réseau, le trafic est automatiquement envoyé aux points d'extrémité d'un pool. Les valeurs sont les suivantes : *
none(par défaut): Aucun basculement n'a lieu et des erreurs peuvent s'afficher pour vos utilisateurs. *temporary: Le trafic est envoyé à d'autres points d'extrémité jusqu'à ce que le point d'extrémité initialement épinglé soit disponible. *sticky: le cookie d'affinité de la session est mis à jour et les demandes suivantes sont envoyées au nouveau point d'accès si nécessaire.Le basculement sans interruption de service n'est pas pris en charge pour l'affinité de session par l'en-tête HTTP.
Exemple :
ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'
Définition de l'affinité de session avec l'API
L'affinité de session est une propriété des équilibreurs de charge globaux, que vous pouvez définir à l'aide des points de terminaison suivants :
Personnalisez le comportement de l'affinité de session en utilisant les paramètres 'session_affinity, 'session_affinity_ttl et 'session_affinity_attributes
Pour activer l'affinité de session par en-tête HTTP, définissez la valeur session_affinity sur header et ajoutez vos noms d'en-tête HTTP à Noms d'en-tête HTTP à session_affinity_attributes.headers.
Lorsque vous créez un équilibreur de charge global à l'aide de l'API, procédez comme suit pour définir l'affinité de session:
-
Configurez l'environnement de votre API avec les variables appropriées.
-
Stockez les valeurs suivantes dans les variables destinées à être utilisées dans la commande d'API :
session_affinity, qui indique le type d'affinité de session utilisé par l'équilibreur de charge, sauf s'il est défini sur "none" ou "default". Les valeurs valides sont none,cookie,ip_cookie.session_affinity_ttl, qui correspond à la durée de vie de l'affinité de session.session_affinity_attributesqui incluent:-
samesiteconfigure l'attribut SameSite sur le cookie d'affinité. Les valeurs valides sont 'Auto, 'Lax, 'None, 'Strict; par défaut 'Auto. -
secureconfigure l'attribut Secure sur le cookie d'affinité de session. Les valeurs valables sont 'Auto, 'Always, 'Never; par défaut 'Auto. -
drain_durationest la valeur de la durée d'opération DRAIN, en secondes. -
zero_downtime_failover(optionnel) envoie automatiquement le trafic vers les points d'extrémité d'un pool en cas de problèmes transitoires sur le réseau. Les valeurs sont "temporaryet "sticky; la valeur par défaut est "none.Le basculement sans interruption de service n'est pas pris en charge pour l'affinité de session par l'en-tête HTTP.
-
-
Lorsque toutes les variables sont initiées, créez l'équilibreur de charge global avec l'affinité de session:
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"
]
}
}'
Si vous définissez samesite sur None dans votre requête API, vous ne pouvez pas définir secure sur Never.