Proxy reverso de subdomínio do IIS com base no nome do host

2

Eu tenho uma máquina virtual no azure executando três aplicativos hospedados automaticamente (não hospedados no IIS) em três portas diferentes.

Eu posso acessá-los nas URLs abaixo:

  • my-server.cloudapp.azure.com:8080
  • my-server.cloudapp.azure.com:8081
  • my-server.cloudapp.azure.com:8082

Eu comprei um nome de domínio ( my-server.company.com ) e quero criar três subdomínios que apontam para cada um dos respectivos aplicativos

  • application-1.my-server.company.com
  • application-2.my-server.company.com
  • application-3.my-server.company.com

Meu primeiro pensamento é instalar o IIS na máquina virtual e configurar um proxy reverso usando o URL Rewrite no site padrão, conforme mencionado neste artigo ( link ).

Nesse cenário, eu configuraria registros CNAME para cada um dos subdomínios para apontar para my-server.cloudapp.azure.com:80 e, em seguida, configurar o proxy reverso para encaminhar para as diferentes portas ( 8080 , 8081 , 8082 ) baseado no cabeçalho do host.

Isso é possível / a melhor maneira de fazer isso?

A segunda pergunta é quando obtenho esse trabalho, como posso adicionar ssl?

Cada subdomínio precisaria de seu próprio certificado SSL? Nesse caso, como isso pode funcionar com a configuração acima (não há sites iis para vincular cada certificado). Ou eu poderia apenas usar um certificado para my-server.company.com e depois descarregar no proxy reverso?

Solução final

Eu criei registros DNS CNAME da seguinte forma:

CNAME | application-1 | my-server.cloudapp.azure.com
CNAME | application-2 | my-server.cloudapp.azure.com
CNAME | application-2 | my-server.cloudapp.azure.com

Então, no azure vm, eu corro Caddy (um servidor web HTTP / 2 com HTTPS automático) com o seguinte Caddyfile:

application-1.my-server.company.com {
    proxy / localhost:8080 {
        proxy_header Host {host}
    }
}

application-1.my-server.company.com {
    proxy / localhost:8081 {
        proxy_header Host {host}
    }
}

application-1.my-server.company.com {
    proxy / localhost:8082 {
        proxy_header Host {host}
    }
}

A beleza disso, é a primeira vez que o Caddy é executado, ele ativa automaticamente o HTTPS para todos os seus sites (usando certificados autogerados da Let's Encrypt) e também redireciona todas as solicitações HTTP para o seu equivalente HTTPS.

Essa configuração também significou que eu não precisei instalar o IIS na VM.

NOTA: Você precisa adicionar uma regra de firewall de entrada para as portas 80 e 443 para o Caddy funcionar

    
por kimsagro 01.05.2016 / 07:28

2 respostas

5

Se eu entendi sua pergunta corretamente, você quer fazer o seguinte:

application-1.my-server.company.com point to my-server.cloudapp.azure.com:8080 
application-2.my-server.company.com point to my-server.cloudapp.azure.com:8081 
application-3.my-server.company.com point to my-server.cloudapp.azure.com:8082 

Uma solução é o uso de um proxy reverso. Veja esta questão para detalhes: Como faço para redirecionar subdomínios para uma porta diferente no mesmo servidor? . Você pode usar um certificado autoassinado entre o proxy reverso e os servidores da web.

Você também pode descarregar o certificado SSL: link . Mas então você precisa gerenciar vários certificados. Você poderia colocar um proxy reverso nginx antes de cada aplicativo para adicionar suporte SSL.

Em seu DNS, adicione um registro A para my-server.company.com. A melhor coisa para os sub-domínios é criar registros CNAME quando eles estiverem no mesmo servidor. Dessa forma, você só precisa atualizar o registro quando o seu IP mudar. Caso contrário, crie registros A para cada subdomínio.

Para o certificado SSL. Você precisa ter um certificado em todos os servidores. O tráfego entre o proxy reverso e o serviço da web deve ser seguro quando você usa vários servidores. Isso porque também pode haver um homem no meio do ataque entre seus servidores.

    
por 11.05.2016 / 14:05
1

Você pode criar três virtualhosts e definir os nomes de ligação para cada aplicativo (registro de DNS tipo A, acho que você não pode usar CNAME porque o registro A é o mesmo no aplicativo hospedado), você pode ver o link

Por fim, para cada host virtual, crie uma regra de reescrita de URL.

    
por 11.05.2016 / 14:36