RousselTMLEARNING

Proxy & réseau

Persistance de session (Stickiness)

Comprendre comment garantir qu'un utilisateur reste sur le même serveur backend durant toute sa session.

1. Persistance par Cookie #

La méthode la plus fiable pour les applications HTTP.

Insertion de Cookie #

HAProxy insère un cookie dans la réponse du serveur. Au retour, il lit ce cookie pour savoir vers quel serveur diriger la requête.

backend app_servers
    balance roundrobin
    cookie SERVERID insert indirect nocache
    server s1 10.0.0.1:80 check cookie s1
    server s2 10.0.0.2:80 check cookie s2

2. Persistance par IP Source #

Utilisée quand l'application ne gère pas les cookies ou pour du trafic non-HTTP.

L'algorithme source #

L'IP de l'utilisateur est hachée pour désigner un serveur. Simple, mais problématique si beaucoup d'utilisateurs partagent la même IP (ex: entreprise via un proxy).

backend app_servers
    balance source
    server s1 10.0.0.1:80 check

3. Les Stick-Tables #

La mémoire interne de HAProxy pour une persistance avancée.

Stockage en mémoire #

Les stick-tables permettent de stocker des informations (IP, ID de session) et de les partager entre plusieurs nœuds HAProxy via Peers.

backend myapp
    stick-table type ip size 100k expire 30m
    stick on src

Conclusion #

Maintenir l'état utilisateur.

Choisir la bonne méthode #

Le cookie est privilégié pour le Web, tandis que l'IP source ou les stick-tables sont indispensables pour les flux persistants complexes (TCP, RDP, etc.).

Mise en pratique : configurer la persistance #

Cookies, stick-tables et tests.

Persistance par cookie #

backend app
    balance roundrobin
    cookie SRV insert indirect nocache httponly secure
    server web1 10.0.0.11:8080 check cookie s1
    server web2 10.0.0.12:8080 check cookie s2
curl -sI https://app.exemple.fr | grep -i set-cookie            # Set-Cookie: SRV=s1; ...
for i in 1 2 3 4; do curl -s -b "SRV=s2" https://app.exemple.fr/hostname; done   # toujours web2

Persistance par adresse IP avec stick-table #

backend app
    balance roundrobin
    stick-table type ip size 200k expire 30m
    stick on src
    server web1 10.0.0.11:8080 check
    server web2 10.0.0.12:8080 check
echo "show table app" | sudo socat stdio /var/run/haproxy.sock     # entrées de la table
echo "clear table app key 203.0.113.7" | sudo socat stdio /var/run/haproxy.sock
Erreur Courante : Derrière un CDN ou un proxy, src est l'adresse du proxy : utilisez stick on req.hdr_ip(X-Forwarded-For,-1) ou un cookie applicatif pour éviter de tout envoyer sur le même serveur.

Articles liés

Anatomie de la configuration HAProxy, Clustering et Haute Disponibilité

Comprendre la structure d'un fichier haproxy.cfg : sections global, defaults, frontend (haute performance), b…

HAProxy dans Kubernetes : L'Ingress Controller Haute Performance

Découvrez en profondeur l'intégration de HAProxy dans Kubernetes. Architecture Direct-to-Pod, options de mise…

Nouveautés HAProxy : OpenTelemetry, JWT Natif, et Optimisations de Performance

Explorez les dernières innovations de HAProxy : prise en charge native d'OpenTelemetry pour l'observabilité, …

Pour aller plus loin

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !