2017-09-28 6 views
0

Wir haben eine Online-Test-Anwendung, die von Studenten verwendet wird. Wir haben 4 verschiedene Server und ein Nginx über alle von ihnen, um den Datenverkehr zwischen allen 4 Servern zu verteilen.Nginx Load Balancer (ip_hash) Senden des gesamten Datenverkehrs an Einzelserver

Da unsere Anwendung sticky Sitzung (für einen Benutzer, alle Anfrage an einen Server) benötigen, so habe ich ip_hash Algorithmus für den Lastenausgleich aktiviert.

Jetzt haben wir eine Situation, wo alle Schüler für Online-Test in einem Computer-Labor erscheinen, die private IP jedem System zugewiesen hat und alle über ein Internet-Gateway mit öffentlicher IP-Adresse übergeben.

Jetzt, wenn Studenten für Test Load Balancer angezeigt werden, erhalten Sie die gleiche Ursprungs-IP für alle Studenten und aufgrund von ip_hash wird der gesamte Datenverkehr an einen Server gesendet.

Wie behebt man dieses Problem?

Wir haben Sticky-Sitzung mit gleicher Lastverteilung beibehalten.

Antwort

0

Es sieht so aus, als ob nginx + zumindest Load Balancing basierend auf Cookies mit der sticky Direktive durchführen kann.

sticky cookie srv_id expires=1h 

wird ein Cookie gesetzt, das den zu verwendenden Server angibt. Dies erfordert, dass Sie SSL-Beendigung bei Nginx tun. Ich weiß nicht, ob die kostenlose Version von nginx das kann. Siehe Dokumentation für Details

+0

Danke für die schnelle Antwort. Aber ich habe eine kostenlose Version von Nginx. Kann ich JSESSIONID aus Response-Header mit Hash für Load Balancing verwenden. Dies ist meine Antwort header: ** Set-Cookie: JSESSIONID = DD622D9F8108FA00CEEADDBCC6E91B1C; Pfad = /; HttpNur ** –

0

Diese documentation Seite beschreibt, warum dies geschieht. Die ip-hash Direktive Hashes nur auf den ersten 3 Oktetts der IP-Adresse.

Sie können stattdessen die hash $remote_addr; Hash basierend auf allen 4 Oktetts verwenden.

Verwandte Themen