Como alternar entre diferentes servidores da Web no mesmo IP com base no nome do host?

1

No meu lugar eu tenho 4 servidores, cada um executando o Win2008r2-WEB rodando como servidor web com um tipo diferente de servidor rodando (TomCat, IIS, Apache, ZendServer), cada servidor também tem um endereço IP diferente (10.0.0.0 / 24)

Existe uma maneira de direcionar o tráfego para cada um dos servidores com base no nome do host? (ex: apache.domain.org, iis.domain.org, tomcat.domain.org, zend.domain.org)

Obviamente, não posso alterar os registros A para os IP internos e não tenho acesso para alterar as portas.

Também devido a razões de proxy, não posso simplesmente usar outras portas, só posso acessar: 80 recebidas.

    
por Sander 01.01.2012 / 23:56

3 respostas

5

O que você precisa fazer para que isso funcione é ter um único servidor web existente (ou um separado que seja dedicado à tarefa) configurado como um proxy reverso.

Ele seria responsável por obter a solicitação no endereço público, ler o cabeçalho do host e, em seguida, fazer proxy da solicitação para o endereço privado apropriado, dependendo do host que foi solicitado.

Pacotes de software populares para essa tarefa são o Apache (você pode usar sua instância existente), nginx ou HAProxy. Há muitas informações em perguntas aqui sobre como configurá-las de forma adequada (" proxy reverso " é o termo de pesquisa que será exibido você está lá), mas se você tiver um desses pacotes de software específicos em mente, poderei editar essa resposta com um exemplo de configuração.

Editar : exemplo da configuração do Apache:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName apache.domain.org
    ServerAlias www.apache.domain.org
    # For this one, we'll imagine that you want to serve these resources from
    # the local server.  If you want do use a separate Apache instance instead,
    # then copy one of the other hosts for this one.
    DocumentRoot "C:\path\to\site\files"
    <Directory "C:\path\to\site\files">
        Order allow,deny
        Allow from all
    </Directory>
    # Any other directives you need for the content here
</VirtualHost>

<VirtualHost *:80>
    ServerName iis.domain.org
    ServerAlias www.iis.domain.org
    # Replace the URL below with the URL of the IIS server - make sure
    # to keep the trailing slash.
    ProxyPass / http://10.x.x.1:80/
    ProxyPassReverse / http://10.x.x.1:80/
</VirtualHost>

<VirtualHost *:80>
    ServerName tomcat.domain.org
    ServerAlias www.tomcat.domain.org
    # Replace the URL below with the URL of the Tomcat server - make sure
    # to keep the trailing slash.
    ProxyPass / http://10.x.x.2:8080/
    ProxyPassReverse / http://10.x.x.2:8080/
</VirtualHost>
    
por 02.01.2012 / 00:27
0

Existe uma razão pela qual o Virtual Hosting baseado em nomes não é uma opção?

link

Os endereços 10.x são os endereços internos e, como você mencionou, o DNS não ajuda você. Todos os servidores respondem ao mesmo endereço IP externo? (Você poderia criar registros A para cada subdomínio no DNS, cada um apontando o mesmo IP ... ou melhor ainda, usando o CNAMES.)

    
por 02.01.2012 / 00:09
0

pelo menos com o IIS, você pode usar cabeçalhos de host para detectar qual site deve responder com base em um nome DNS. Portanto, se você quiser que o site 1 do IIS responda a sites como "testsite1.com e www.testsite1.com", basta adicioná-los ao cabeçalho do host desse site do IIS. Em seguida, em um segundo site da iis, você pode ter "testsite2.com e www.testsite2.com" asigned e o IIS será capturado nesses domínios. DNS, tanto quanto A vs. CNAME quando se trata de cabeçalhos de host é irrelevante. O IIS funcionará com ambos.

Normalmente, o que fazemos com o IIS, é que criamos um registro A para o próprio nome do servidor e, em seguida, usamos CNAME para encaminhar para o registro de nomes de servidor A.

Então, servidor Web A = 10.10.10.10 testsite1.com CNAME = webserver testsite2.com CNAME = webserver

O IIS saberá então para onde enviar o site com base no nome DNS.

    
por 02.01.2012 / 00:17