
다음과 같은 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
방문하면 www.example.com
모든 것이 괜찮습니다. 그러나 높은 빈도로 다시 로드한 후(브라우저에서 Shift-Ctrl-R을 누르는 경우) 그렇게 하면 demo.example.com
결국 demo.example.com
. 예, 정확합니다. www.example.com
브라우저에서 열었 지만 HAProxy가 이를 backend2로 라우팅합니다(오류를 반환함).
분명히 HAProxy는 두 서비스가 로드 밸런싱을 위한 대안이 아니라 매우 별개의 제품이라는 점을 완전히 이해하지 못합니다. 내가 어떻게 할 수있는보장하다그게 www.example.com
backend1로 끝나나요?
답변1
이것은 다음 문서의 예입니다 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
무언가를 설정 해야 할 수도 있습니다 tcp-request inspect-delay
. 설정하지 않으면 haproxy가 전혀 기다리지 않고 SNI가 무엇인지 전혀 알 수 없기 때문입니다.
자세한 설명은에 대한 문서tcp-request inspect-delay