답변:
이것은 Haproxy로 가능합니다. TCP 프록시를 설정하고 SNI를 추출하고 SNI를 기반으로 라우팅을 수행 할 수 있습니다. 예를 들면 다음과 같습니다.
backend be.app1
mode tcp
no option checkcache
no option httpclose
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
tcp-request content reject
use-server server1 if { req.ssl_sni -m beg app1. }
server server1 server1:8443 check id 1 weight 0
SSL hello를받을 때까지 요청을 지연해야합니다. 그렇지 않으면 haproxy가 SNI 헤더를 수신하기 전에 연결을 시도합니다.
현재 구성에서 각 SNI에 대해 하나의 서버 만 실행되고 임의 요청을 수신하지 않기 때문에 가중치가 0 인 서버를 사용하고 있습니다. 당신은 아마 이것을 가지고 노는 더 좋은 방법을 찾을 수 있습니다.
이게 도움이 되길 바란다.
sniproxy를 사용할 수 있습니다 : https://github.com/dlundquist/sniproxy
구성 예 :
listener 0.0.0.0:443 {
protocol tls
table TableHTTPS
fallback 127.0.0.1:8443
}
listener 0.0.0.0:80 {
protocol http
table TableHTTP
fallback 127.0.0.1:8080
}
table TableHTTPS {
domain1.com backend1:443
domain2.org backend2:443
}
table TableHTTP {
domain1.com backend1:80
domain2.org backend2:80
}
다가오는 TLS 1.3으로 2019 년에도 가능합니다! 많은 웹 서버 또는 특수 리버스 프록시가이 기능을 기본적으로 제공합니다.
다음은 리버스 프록시가 필요한 설정에 널리 사용되는 Nginx의 구성 예입니다.
stream {
map $ssl_preread_server_name $selected_upstream {
example.org upstream_1;
example.net upstream_2;
example.com upstream_3;
default upstream_4;
}
upstream upstream_1 { server 10.0.0.1:443; }
upstream upstream_2 { server 10.0.0.2:443; }
upstream upstream_3 { server 10.0.0.3:443; }
upstream upstream_4 { server 10.0.0.4:443; }
server {
listen 10.0.0.5:443;
proxy_pass $selected_upstream;
ssl_preread on;
}
}
관련 Nginx 모듈은 stream_core
및 stream_ssl_preread
입니다. 매뉴얼 :