
Ich habe die folgende HAProxy-Konfiguration:
listen sni-443
bind *:443
mode tcp
timeout connect 4s
timeout client 3m
timeout server 3m
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
acl no-ssl req.ssl_hello_type 0
use-server backend1.default.svc.cluster.local if !no-ssl { req_ssl_sni -i www.example.com }
server backend1.default.svc.cluster.local 10.96.245.95:443 weight 0
use-server backend2.default.svc.cluster.local if !no-ssl { req_ssl_sni -i demo.example.com }
server backend2.default.svc.cluster.local 10.96.184.199:443 weight 0
Wenn ich besuche www.example.com
, ist alles in Ordnung. Aber wenn ich das mache, nachdem ich demo.example.com
sehr oft neu geladen habe (Hämmern auf Umschalt-Strg-R im Browser), lande ich bei demo.example.com
. Ja, genau: Ich öffne www.example.com
im Browser, aber HAProxy leitet das an backend2 weiter (was einen Fehler zurückgibt).
Offenbar versteht HAProxy nicht ganz, dass die beiden Dienste keine Alternativen für den Lastenausgleich sind, sondern sehr unterschiedliche Produkte. Wie kann ichsicherstellendas www.example.com
bei backend1 landet?
Antwort1
Dies ist ein Beispiel aus der Dokumentation für req_ssl_sni
:
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend bk_allow if { req_ssl_sni -f allowed_sites }
default_backend bk_sorry_page
Sie müssen wahrscheinlich tcp-request inspect-delay
etwas festlegen, denn wenn Sie es nicht festlegen, bedeutet dies, dass Haproxy überhaupt nicht wartet und keine Ahnung hat, was SNI war.
Längere Erklärung inDokumente fürtcp-request inspect-delay