nginx proxy de fluxo reverso com várias portas para o mesmo servidor

1

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;
    }

}
    
por Andrew 17.05.2017 / 16:49

1 resposta

2

Abaixo da configuração deve funcionar para você

stream {

    map $ssl_preread_server_name:$server_port $upstream {
      server1.domain.com:443 server1;
      server2.domain.com:443 server2;
      server1.domain.com:9997 server3;
    }

    server {
      listen 443;
      proxy_pass $upstream;

      ssl_preread on;
    }

    server {
      listen 9997;
      proxy_pass $upstream;
      ssl_preread on;
    }


    upstream server1 {
      server 1.2.3.4:443;
    }

    upstream server2 {
      server 1.2.3.5:443;
    }
    upstream server3 {
      server 1.2.3.4:9997;
    }
}
    
por 29.11.2017 / 10:21