Isso pode ser feito usando o nginx
ngx_stream_ssl_preread_module . Aqui está uma configuração de exemplo:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream server1 {
server 192.0.2.125:443;
}
upstream server2 {
server 192.0.2.126:443;
}
map $ssl_preread_server_name $upstream {
hostnames;
.server1.example.com server1;
.server2.example.com server2;
}
server {
listen 443;
listen [::]:443;
ssl_preread on;
proxy_pass $upstream;
}
}
A diretiva upstream
é usada para definir o servidor para o envio de tráfego. Em seguida, o map $ssl_preread_server_name
permite que nginx
leia o valor SNI da solicitação do cliente para direcionar corretamente o tráfego para a caixa direita upstream
.
Isso funcionará APENAS se o cliente enviar um valor SNI válido. Isso também permite o uso de certificados de cliente para autenticação, pois a conexão TLS não é concluída até que DEPOIS nginx
envie o tráfego para o ponto de extremidade remoto.