
Tengo la siguiente configuración de HAProxy:
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
Si lo visito www.example.com
, todo está bien. Pero cuando lo hago después de haber recargado demo.example.com
con alta frecuencia (presionando Shift-Ctrl-R en el navegador), termino en demo.example.com
. Sí, exactamente: lo abro www.example.com
en el navegador pero HAProxy lo enruta al backend2 (que devuelve un error).
Aparentemente, HAProxy no comprende del todo que los dos servicios no son alternativas para el equilibrio de carga sino productos muy distintos. Cómo puedoasegurar¿Eso www.example.com
termina con backend1?
Respuesta1
Este es un ejemplo de documentos para 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
Probablemente necesite tcp-request inspect-delay
configurar algo, porque no configurarlo significa que haproxy no espera en absoluto y no tiene idea de qué era SNI.
Explicación más larga endocumentos paratcp-request inspect-delay