Portas proxy TCP reversas 80 e 443 por nome de host do servidor

Portas proxy TCP reversas 80 e 443 por nome de host do servidor

Eu tenho um endereço IP público. Estou tentando permitir o acesso via IP público nas portas 80 e 443 a múltiplos serviços, diferenciados pelo nome do servidor solicitado.

NO ENTANTO, um serviço requer umTCPproxy reverso nas portas 80 e 443 no IP público para operar. Outro requer proxy reverso TCP, mas apenas na porta 443. O restante são apenas sites e funciona bem com um proxy reverso http, mas quero que os sites sejam acessíveis publicamente nas portas 80 e 443 para facilitar para os visitantes e para o letsencrypt.

Posso ativar quantas VMs e IPs privados forem necessários para mantê-lo simples, mas limitado a um endereço IP público.

Posso fazer isso com a configuração do nginx como proxy reverso usando SNI? Em teoria, acho que deveria ser capaz de transmitir tudo por tcp por nome de host usando SNI direcionado para o servidor apropriado, com um segundo servidor web que tenha os sites necessários configurados para escutar em portas diferentes. Por exemplo, nginx.conf:

stream {

    map $ssl_preread_server_name $name {
            serviceone.domain.tld serviceone;
            servicetwo.domain.tld servicetwo;
            website1.domain.tld website1;       
            website2.domain.tld website2;   
    }

    upstream serviceone {
            server 10.1.99.7:443;
    }

    upstream servicetwo {
            server 10.1.99.20:443;
    }

    upstream website1 {
            server 10.1.99.30:10443;
    }

    upstream website2 {
            server 10.1.99.30:10444;
    }


    server {
            listen 443;
            listen 80;
            resolver 8.8.8.8;

            proxy_pass $name;
            ssl_preread on;
    }

}

Eu tenho algo funcionando semelhante ao acima em meu nginx.conf, mas estou lutando um pouco para entender como as solicitações da porta 80 entram na equação (acabei de colocar listen 80 no bloco do servidor, mas não consegui explicar como as solicitações são tratadas em termos de diferenciar entre 443 e 80 se o mesmo nome de servidor for solicitado)

Estou aberto a melhores maneiras de fazer isso também usando nginx ou haproxy etc.

Responder1

Basta usar blocos server{...} separados para cada nome de host.

Ele faz o trabalho sem depender de um módulo adicional e poupará MUITO trabalho se os servidores upstream diferirem na configuração exigida no proxy.

informação relacionada