Ich habe eine Reihe von Fragen zu SSL, lokalen Sitzungen und Lastausgleich, die miteinander verbunden zu sein scheinen. Daher entschuldige ich mich im Voraus für die Länge dieser Frage.
Ich habe eine Website, die dateibasierte Sitzungen verwendet. Die Art der Website ist, dass das meiste davon http ist, aber einige Abschnitte sind ssl. Derzeit ist es aufgrund der dateibasierten Sitzungen erforderlich, dass alle SSL-Anforderungen denselben Server wie alle vorherigen http-Anforderungen erreichen.
Aus Zeitgründen möchte ich das einfachste tun, um den erhöhten http- und ssl-Verkehr auszugleichen.
Es scheint zwei Optionen für Algorithmen zum Ausgleich von Haftlasten zu geben:
- IP-basiert
- Cookie-basiert
Die IP-basierte Lösung wird wahrscheinlich funktionieren, aber der Hashing-Algorithmus ändert möglicherweise den Server, zu dem ein Benutzer wechselt, wenn ein Server ausfällt oder hinzugefügt wird, was beim aktuellen dateibasierten Sitzungsaufbau unerwünscht ist. Ich nehme auch an, dass es einem Benutzer technisch möglich ist, die IP-Adresse beim Surfen auf einer Website zu ändern.
Der Cookie-basierte Algorithmus scheint besser zu sein, aber die Unfähigkeit, das Cookie zu überprüfen, wenn es von ssl verschlüsselt wird, bringt anscheinend seine eigenen Probleme mit sich.
Ich habe nach Beispielen für den Lastausgleich von SSL gegoogelt, und ich kann anscheinend keine expliziten Beispiele für Setups finden, die einen Cookie-basierten Lastausgleich durchführen UND die durch Hinzufügen eines weiteren SSL-Decoders mit erhöhter SSL-Last umgehen können.
Bei den meisten expliziten Beispielen, die ich gesehen habe, befindet sich der SSL-Decoder (normalerweise Hardware, Apache_mod_ssl oder Nginx) zwischen dem Browser-Client und dem Load Balancer. Die Beispiele scheinen normalerweise so etwas zu haben (geändert von http://haproxy.1wt.eu/download/1.3/doc/architecture.txt ):
192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | + - + - + + - + - + + - + - + + - + - + - + - + - + | LB1 | | A | | B | | C | | D | + ----- + + --- + + --- + + --- + + --- + Apache 4 billige Webserver mod_ssl Haproxy
Der SSL-Decodierungsteil im obigen Beispiel scheint ein potenzieller Engpass zu sein, der nicht horizontal skalierbar ist.
Ich habe mir Haproxy angesehen und es scheint eine 'mode tcp'-Option zu geben, die so etwas zulässt, dass Sie mehrere SSL-Decoder haben können:
Haproxy | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
In einem solchen Setup scheint es jedoch, dass Sie die Client-IP verlieren würden, da Haproxy die SSL nicht dekodiert: https://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -zum
Ich habe mir auch Nginx angesehen und sehe auch keine expliziten Beispiele für horizontal skalierbare SSL-Decoder. Es scheint viele Beispiele für Menschen zu geben, die Nginx als potenziellen Engpass haben. Und zumindest scheint dieser Link darauf hinzudeuten, dass nginx nicht einmal die Option des haproxy-ähnlichen Setups hat, bei dem Sie die IP verlieren würden, indem Sie sagen, dass nginx "das transparente Übergeben von TCP-Verbindungen an ein Backend nicht unterstützt". So übergeben Sie Apache SSL-Verkehr durch Nginx-Proxy? .
Fragen:
- Warum scheint es nicht mehr Beispiele für Setups zu geben, die mehr SSL-Decoder hinzufügen, um mit erhöhtem Datenverkehr fertig zu werden?
- Liegt es daran, dass der SSL-Decodierungsschritt nur ein theoretischer Engpass ist und praktisch ein Decoder im Wesentlichen ausreicht, außer für Websites mit lächerlichem Datenverkehr?
- Eine andere mögliche Lösung, die in den Sinn kommt, ist vielleicht, dass jeder mit solch erhöhten SSL-Anforderungen auch einen zentralen Sitzungsspeicher hat, sodass es keine Rolle spielt, auf welchen Webserver der Client bei sequentiellen Anforderungen trifft. Dann können Sie mod_ssl oder ein gleichwertiges Element auf jedem Webserver aktivieren.
- Die oben genannte Haproxy-Lösung scheint zu funktionieren (neben dem Client-IP-Problem), aber jemand ist auf eine auf Cookies basierende Software-Load-Balancer-Lösung gestoßen, die funktioniert, indem die Anzahl der Decoder erhöht wird, während die Client-IP beibehalten wird, oder ist dies möglicherweise technisch nicht der Fall möglich (weil Sie die Anforderung dekodieren müssen, um die Client-IP zu erhalten. In diesem Fall liegt ein Decoder-Engpass vor).
Unter der Annahme, dass alles, was ich gesagt habe, wahr ist, scheinen dies meine Optionen zu sein:
- Verwenden Sie IP-Hashing (schlecht für Benutzer, die möglicherweise IPs legitim ändern, und für Server, die Szenarien hinzufügen und löschen).
- Verwenden Sie nginx oder mod_ssl als erstes Programm, das die SSL-Anforderung berührt. Dies ist ein potenzieller SSL-Dekodierungsengpass
- Verwenden Sie Haproxy als erstes Programm, das die SSL-Anforderung berührt, um eine horizontale SSL-Skalierbarkeit zu erreichen.
- Wechseln Sie langfristig zu einem mobilen oder zentralen Sitzungsspeicher, sodass keine klebrigen Sitzungen erforderlich sind