Como hospedar vários servidores Web físicos atrás de um único endereço IP?

14

Estou executando vários servidores web em minha casa, cada um deles conectado ao meu roteador.

Servidor A Servidor B Servidor C

Atualmente, só posso usar um servidor, pois minha porta IP (xx.xxx.xx.xx) 80 está apontando para o servidor A. No entanto, alguns domínios apontam para o servidor A, outros para B, etc.

Com o meu único endereço IP, como eu aponto para cada servidor? Por exemplo, meus registros A (host) apontam apenas para o meu endereço IP.

Desculpe se pareço confuso. Deixe-me saber se não estou sendo claro.

Cada servidor está executando o Ubuntu Server 12.04.02 e está usando o Apache (se isso ajudar). Meu roteador também é um Netgear e meu ISP é o Time Warner Cable.

Stephen Cioffi
fonte
@kobaltz Não exatamente porque são servidores diferentes, não hosts virtuais. Estes são 3 servidores físicos
Stephen Cioffi
Minha resposta na pergunta ainda é a mesma coisa em que você teria um servidor proxy reverso que seria o primeiro a ser atingido após o roteador. A partir daí, enviaria os dados para um dos três servidores. Você pode até fazer isso de dentro do roteador se usar algo como o OpenWRT.
kobaltz
Atualmente, estou usando a explicação na minha resposta da outra pergunta. Eu tenho um servidor de máquina virtual que tinha uma VM para o gateway e 20 nós. Dependendo do subdomínio e do nome do domínio, ele envia os dados para um dos 20 servidores.
kobaltz

Respostas:

9

Os sites serão reconhecidos através do Host:cabeçalho enviado pelo navegador. Mas como seu roteador não é capaz de desmembrar HTTP usado pela hospedagem virtual, você precisará escolher um servidor como "ponto final" (e informar ao roteador esse endereço como Servidor Virtual / DMZ).

Em seguida, você configura essa máquina como servidor da web para seus domínios e proxy para as outras (por exemplo, usando o proxy reverso Apache ) ou (talvez melhor) instala um proxy nessa máquina e usa-o para multiplexar solicitações para outros servidores . Alguns domínios podem até estar hospedados na mesma máquina. nginxé adequado para esse tipo de trabalho, mas você também pode usar outro software (por exemplo pound).

Eu acho que a segunda solução é melhor porque você não precisa mexer nas configurações dos servidores da Web: um proxy faz o proxy e vários servidores fazem o serviço da Web. Se você precisar adicionar servidores ou mover hosts virtuais, essa arquitetura é mais fácil de manter.

                                    +-- virtual hosts 1..9 -- server B
                                    |
router ----- machine A (nginx?) ----+-- virtual hosts 10..23- server C
                                    |
                                    +-- virtual hosts 24..99- server D

A latência adicionada devido à decodificação do pedido duas vezes (uma vez pelo proxy, uma vez pelo destinatário pretendido) é insignificante e mais do que compensada pela aceleração fornecida pelo próprio proxy.

LSerni
fonte
Se eu criar um convidado da VM como proxy, qual é o melhor sistema operacional a ser usado e quais recursos de hardware devo alocar? Você mencionou a configuração desse proxy na DMZ ... isso é necessário? Não posso enviar adiante apenas as portas que desejo abrir, para que ainda haja alguma camada de proteção através do firewall e do NAT do roteador?
Reece
Os recursos para o proxy não são um problema, eles serão fortemente vinculados à rede. Quanto ao sistema operacional, eu diria que um Unix com certeza, Linux ou BSD, dependendo do que você está mais confortável. Também existem dispositivos prontos para várias soluções de virtualização (vmware, virtualbox, xen, etc.). E sim, você pode definitivamente encaminhar apenas as portas necessárias.
LSerni