Isso é possível com o Haproxy. Você pode configurar um proxy TCP e extrair o SNI e fazer o roteamento com base no SNI. Aqui está um exemplo:
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
É essencial atrasar a solicitação até você receber o olá SSL, caso contrário, o haproxy tentará fazer uma conexão antes de receber o cabeçalho SNI.
Estou usando servidores com peso 0 porque, na minha configuração atual, só tenho um servidor em execução para cada SNI e não quero que eles recebam solicitações aleatórias. Você provavelmente pode encontrar melhores maneiras de brincar com isso.
Eu espero que isso ajude.