Comment pouvons-nous mettre en œuvre la session collant à haproxy lorsque SSL doit se terminer sur les serveurs Backend? Nous avons besoin de la colline car les backends ne peuvent pas partager des sessions.
Ceci est ma configuration d'origine:
# SSL passthrough
listen https_handler
bind 1.2.3.4:443
mode tcp
balance leastconn
stick match src
stick-table type ip size 200k expire 30m
server s1 1.1.1.1:443
server s2 1.1.1.2:443
# haproxy logs (not sticking)
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.396] fe BACKEND_Website/s1 37/0/1/3/41 200 8364
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.456] fe BACKEND_Website/s1 36/0/1/1/39 200 9082
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.456] fe BACKEND_Website/s2 35/0/1/3/39 200 2529
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.545] fe BACKEND_Website/s1 35/0/0/3/38 200 1460
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.501] fe BACKEND_Website/s2 36/0/1/1/109 200 376
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.545] fe BACKEND_Website/s1 36/0/1/1/74 200 2298
10.x.x.2:xxxxx [17/Dec/2014:19:29:41.604] fe BACKEND_Website/s1 35/0/1/2/38 200 5542
La configuration ci-dessous est ma tentative de lire le src
:
Cela se traduit par une 502 erreur de passerelle Bad. Je suppose que c'est parce que le trafic est déjà déchiffré au moment où il atteint le backend.
# terminate SSL at HAProxy
listen https_handler
bind 1.2.3.4:443 ssl crt /etc/ssl/certs/certs.pem
mode tcp
balance leastconn
stick match src
stick-table type ip size 200k expire 30m
server s1 1.1.1.1:443
server s2 1.1.1.2:443
Notez que j'ai branché le certificat à la liaison. Ceci est pour que Haproxy puisse lire le SRC et configurer la table Stick-Tableau. (Je ne sais pas si cela est correct.) Et à ce stade, le trafic est déjà déchiffré.
Je pense que le problème réside lorsque ce trafic déchiffré est transmis aux serveurs de backend qui attend le trafic crypté ...
J'ai vu ces suggestions:
send-proxy
directive & X-Forward-Proto
en-tête . - mais réalisé cela nécessite également un backend http uniquement.Apprécierait tout conseil.
La solution la plus facile est d'utiliser balance source
, mais si de nombreux clients proviennent de la même adresse IP, il peut ne pas être très juste sur vos serveurs de backend.
Voir http://blog.haproxy.com/2013/04/22/client-ip-persistence-or-source-ip-hashloadbanancing/ Pour plus de discussion sur les méthodes pour accomplir cette .
Si la racine de votre problème est le fait que les serveurs de backend s'attendent à ce que le trafic soit https plutôt que http, essayez cryptage le HTTP et faire votre équilibrage de la charge régulière7.
listen https_handler
bind 1.2.3.4:443 ssl crt /etc/ssl/certs/certs.pem
mode http
balance leastconn
# any stick rules you need
server s1 1.1.1.1:443 ssl
server s2 1.1.1.2:443 ssl
Plus facilement - comme vous essayez apparemment de coller par src
de toute façon, pourquoi vous déchiffrez même le TCP trafic en premier lieu?
listen https
bind 1.2.3.4:443 # <- NO ssl setting
mode tcp
balance leastconn
stick match src
stick-table type ip size 200k expire 30m
server s1 1.1.1.1:443 ssl
server s2 1.1.1.2:443 ssl
In TCP =, vous vous souciez de la charge utile. Plus précisément, vous ne vous souciez pas de savoir si c'est crypté et comment.