J'ai un tas de questions concernant SSL, les sessions locales et l'équilibrage de charge qui semblent être interconnectés, donc je m'excuse à l'avance pour la longueur de cette question.
J'ai un site Web qui utilise des sessions basées sur des fichiers. La nature du site est que la plus grande partie est http, mais certaines sections sont en ssl. Actuellement, en raison des sessions basées sur des fichiers, il est nécessaire que toutes les requêtes ssl atteignent le même serveur que toutes les requêtes http précédentes.
En raison de contraintes de temps, je veux faire la chose la plus simple possible pour équilibrer la charge du trafic http et ssl accru.
Il semble y avoir 2 options pour les algorithmes d'équilibrage de charge persistants:
- basé sur IP
- basé sur les cookies
La solution basée sur ip fonctionnera probablement, mais l'algorithme de hachage changera potentiellement le serveur auquel un utilisateur se rend lorsqu'un serveur tombe en panne ou est ajouté, ce qui n'est pas souhaitable avec la configuration de session basée sur des fichiers actuelle. Je suppose également qu'il est techniquement possible pour un utilisateur de changer légitimement l'ips lors de la navigation sur un site Web.
L'algorithme basé sur les cookies semble meilleur, mais l'incapacité d'inspecter le cookie lorsqu'il est crypté par SSL présente apparemment ses propres problèmes.
J'ai cherché sur Google des exemples sur la façon d'équilibrer la charge ssl, et je n'arrive pas à trouver d'exemples explicites de configurations qui peuvent effectuer un équilibrage de charge basé sur les cookies ET qui peuvent faire face à une charge ssl accrue en ajoutant un autre décodeur ssl.
La plupart des exemples explicites que j'ai vus ont le décodeur SSL (généralement du matériel, apache_mod_ssl ou nginx) situé entre le client du navigateur et l'équilibreur de charge. Les exemples semblent généralement avoir quelque chose comme ça (modifié depuis 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 | + ----- + + --- + + --- + + --- + + --- + serveurs web bon marché apache 4 mod_ssl haproxy
La partie de décodage ssl dans l'exemple ci-dessus semble être un goulot d'étranglement potentiel qui n'est pas évolutif horizontalement.
J'ai regardé haproxy, et il semble avoir une option 'mode tcp' qui permettrait quelque chose comme ça, qui vous permettrait d'avoir plusieurs décodeurs SSL:
haproxy | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
Cependant, dans une telle configuration, il semble que vous perdriez l'IP du client car haproxy ne décode pas le SSL: https://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -pour
J'ai également regardé nginx, et je ne vois pas non plus d'exemples explicites de décodeurs SSL à échelle horizontale. Il semble y avoir de nombreux exemples de personnes ayant nginx comme goulot d'étranglement potentiel. Et au moins ce lien semble suggérer que nginx n'a même pas l'option de la configuration de type haproxy où vous perdriez l'ip en disant que nginx "ne prend pas en charge la transmission transparente des connexions TCP à un backend" Comment passer Apache Trafic SSL via le proxy Nginx? .
Des questions:
- Pourquoi ne semble-t-il pas y avoir plus d'exemples de configurations ajoutant plus de décodeurs SSL pour faire face à l'augmentation du trafic?
- Est-ce parce que l'étape de décodage SSL n'est qu'un goulot d'étranglement théorique, et pratiquement, un décodeur suffira essentiellement, sauf pour les sites au trafic ridicule?
- Une autre solution possible qui vient à l'esprit est peut-être que toute personne ayant de tels besoins SSL a également un magasin de sessions centralisé, donc peu importe le serveur Web que le client frappe sur les demandes séquentielles. Ensuite, vous pouvez activer mod_ssl ou équivalent sur chaque serveur Web.
- La solution haproxy citée ci-dessus semble fonctionner (en plus du problème d'IP client), mais quelqu'un a-t-il rencontré une solution d'équilibrage de charge logicielle basée sur des cookies qui fonctionnerait en augmentant le nombre de décodeurs tout en conservant l'IP du client, ou est-ce peut-être pas techniquement non possible (car vous devez décoder la demande pour obtenir l'adresse IP du client, auquel cas, nous avons un goulot d'étranglement du décodeur).
En supposant que tout ce que j'ai dit est vrai, cela semble être mes options:
- utiliser le hachage IP (mauvais pour les utilisateurs qui peuvent potentiellement légitimement changer d'ips, et pour les scénarios d'ajout et de suppression de serveur)
- utiliser nginx ou mod_ssl comme 1er programme touchant la requête ssl, ce sera un goulot d'étranglement de décodage ssl potentiel
- utiliser haproxy comme 1er programme touchant la requête ssl, obtenant une évolutivité horizontale ssl, mais vivant sans ips enregistré au niveau du serveur web pour les requêtes ssl (probablement temporairement ok)
- à plus long terme, optez pour un magasin de sessions mobile ou centralisé, rendant les sessions persistantes inutiles