J'ai une application qui s'exécute sur deux instances AWS différentes et j'aimerais activer des sessions "persistantes" ou "persistantes" basées sur IP afin de pouvoir tirer parti des technologies de socket Web d'une manière particulière.
J'ai deux configurations différentes qui impliquent toutes deux ip_hash
d'activer ces sessions persistantes.
Dans la première configuration, les processus d'application s'exécutent sur la même instance que la configuration Nginx. Cela fonctionne , les sessions sont persistantes comme prévu.
upstream my_app {
ip_hash;
# local servers
server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Dans la deuxième configuration, je pointe vers des instances externes et j'essaie d'obtenir le même effet. Cette configuration ne fonctionne pas . En d'autres termes, les sessions sont toujours équilibrées en charge.
upstream my_app {
ip_hash;
# external servers
server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Suis-je en ip_hash
train d' utiliser correctement? Comment puis-je activer des sessions IP «persistantes» pour les serveurs externes?
Réponses:
Mon serveur était derrière l'équilibrage de charge AWS, donc je devais passer les en-têtes corrects en amont pour qu'il reflète toujours l'adresse IP du client. La configuration suivante a résolu mon problème (voir la ligne commentée):
la source
Selon la documentation Nginx, la prise en charge des sessions persistantes n'est disponible que pour leur version Plus coûteuse. J'ai recherché des alternatives et plus je me suis rapprochée de cette vieille fourche qui n'est pas compatible avec Nginx 1.5+ https://github.com/lusis/nginx-sticky-module
J'ai également essayé de construire un module LUA mais il n'y a pas de hooks API pour la sélection des pairs, juste pour l'énumération et le blocage.
Équilibrage de charge Nginx Plus
Mise à jour
J'ai trouvé un autre excellent module, voir https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
la source