Estou tentando usar o nginx como um proxy reverso para dois servidores diferentes. Os servidores exigem o uso de certificados do lado do cliente para autenticação, o que significa que o nginx é configurado como um proxy de fluxo que aproveita a map $ssl_preread_server_name
para inspeção de SNI para enviar para o servidor correto.
Isso funciona muito bem para o par de servidores que está hospedando agora. Ambos ouvem em 443, mas fornecem serviços completamente diferentes, mas o redirecionamento via SNI está funcionando muito bem.
O problema é que um dos servidores também usa a porta 9997 para comunicação (TLS) e precisamos adicionar mais deles na mixagem. Atualmente, estamos apenas codificando o tráfego do nginx para o único servidor que usa o 9997. Isso não funciona à medida que avançamos e temos servidores adicionais hospedando conteúdo em 9997
Como posso configurar o nginx para transmitir 443 e 9997 para a caixa que precisa dessas comunicações e, ao mesmo tempo, continuar enviando 443 para o outro servidor quando necessário?
Ele precisa ser dinâmico para que o tráfego seja enviado para o servidor RIGHT.
Aqui está a configuração que funciona agora (algumas informações editadas):
#user nobody;
worker_processes 1;
error_log /var/log/nginx/error.log;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream {
map $ssl_preread_server_name $upstream {
server1.domain.com server1;
server2.domain.com server2;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
server {
listen 9997;
proxy_pass 1.2.3.4:9997;
}
upstream server1 {
server 1.2.3.4:443;
}
upstream server2 {
server 1.2.3.5:443;
}
}