2017-09-28 1 views
0

Nous avons une application de test en ligne qui est utilisée par les étudiants. nous avons 4 serveurs différents et un Nginx au-dessus d'eux pour équilibrer le trafic entre les 4 serveurs. Comme notre application a besoin d'une session collante (pour un utilisateur, toutes les requêtes à un serveur), j'ai donc activé l'algorithme ip_hash pour l'équilibrage de charge.Nginx Load Balancer (ip_hash) envoyant tout le trafic à un seul serveur

Maintenant, nous avons une situation où tous les étudiants apparaissent pour un test en ligne dans un laboratoire informatique qui a IP privé attribué à chaque système et Tous passent par une passerelle Internet avec IP publique.

Maintenant, lorsque les étudiants apparaissent pour l'équilibreur de charge de test, ils obtiennent la même adresse IP d'origine pour tous les étudiants et, en raison de ip_hash, ils envoient tout le trafic à un serveur.

comment résoudre ce problème?

Nous avons maintenir la session Sticky avec répartition égale de la charge.

Répondre

0

Il semble que nginx + puisse au moins effectuer un équilibrage de charge basé sur des cookies en utilisant la directive sticky.

sticky cookie srv_id expires=1h 

définit un cookie qui indique le serveur à utiliser. Cela nécessite que vous fassiez une terminaison SSL à nginx. Je ne sais pas si la version gratuite de nginx peut le faire. Voir la documentation pour les détails

+0

Merci pour la réponse rapide. Mais j'ai la version gratuite de nginx. Puis-je utiliser JSESSIONID à partir de l'en-tête de réponse avec hachage pour l'équilibrage de charge. Ceci est l'en-tête de réponse: ** Set-Cookie: JSESSIONID = DD622D9F8108FA00CEEADDBCC6E91B1C; Chemin = /; HttpOnly ** –

0

Cette page documentation explique pourquoi cela se produit. La directive ip-hash ne fait que hacher les 3 premiers octets de l'adresse IP.

Vous pouvez utiliser le hash $remote_addr; à la place du hachage basé sur les 4 octets.