Vários servidores da web atrás de um IP público

2

Cartaz da primeira vez do leitor de longa data (ele ele). Então aqui está meu dilema. Estou hospedando 3 sites em casa para alguns amigos, nada grande, apenas sites wordpress. Executando-os no VMWare Workstation. Tem uma tonelada de ram de sobra e toda essa bagunça, então não se preocupe com a frente do recurso. Como eu estou construindo o site # 2, eu percebo, 'CRAP! ... Como eu vou rotear estes no roteador passado? "Agora, antes que alguns de vocês digam vhosts, estou segregando os sites em diferentes VMs. 1 de 3 não é um site muito importante, mas no caso de algo, eu prefiro não ter tudo para baixo ao mesmo tempo. Então ...

Eu tenho um roteador Linksys genérico (com o atroz novo Smart Wifi). Cara, eu preciso mudar o firmware para as coisas boas, mas isso é outro dia. Portanto, um IP público, 3 VMs, todos com IPs internos únicos, ou seja, 192.1 / 2/3. O roteador não permite o encaminhamento de porta para vários IPs usando a mesma porta (80).

Se houver muito o que fazer, eu vou morder a bala e movê-los para a mesma VM e vhost os sites diferentes, mas meu pensamento era usar OUTRA VM. Um roteador virtual. Eu posso pensar em algumas VMs de roteadores / firewalls como pfSense, m0n0wall, mas eu estou apenas procurando por algo simples e fácil de começar, mas eu estou supondo que ele precisará agir um pouco como um vhost pegaria na porta 80 pedido do roteador, em seguida, dispersando o tráfego para as 3 VMs segurando os servidores da web usando os cabeçalhos de host (eu acho).

Alguém tem alguma sugestão, melhor método, etc.? Muito apreciado antecipadamente, e tanto quanto colocá-los todos sob o mesmo teto de uma VM resolveria isso instantaneamente, no meu caso, a separação entre o VM é um bom truque.

Mas muito aberto a pensamentos. Felicidades.

    
por Der Hochstapler 11.12.2013 / 09:42

3 respostas

3

Configure mais um vm como proxy, que direcionaria o tráfego para a vm apropriada usando o nome de domínio.

    
por 11.12.2013 / 10:49
2

Eu tentei várias soluções e o sucesso que tenho está usando o Apache2. Ele vem com recurso de hospedagem virtual.

Você precisará fazer um pouco de "fiação" no Apache2, mas incluo meu conf como guia para você. Como isso funciona: o apache2 opera no recurso "Domínio Baseado em Nome", no qual ele executa quantos sites desejar, mas em um IP público. [Sou um desenvolvedor que explica por que esses muitos sites].

   $ sudo apt-get install -y apache2 apache2-dev apache2-threaded-dev

Conectando seu apache2.conf adicionando estas três linhas no final do conf

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

Configure o seu httpd.conf com este guia; ajustar de acordo com o seu caso. Por padrão, como nova instalação, você não verá httpd.conf, mas o Apache2 responderá se encontrar o httpd.conf no diretório / etc / apache2.

    $ sudo touch /etc/apache2/httpd.conf

e adicione isso ao httpd.conf. Grande ênfase é deixar : 80 intocado. Quando você vê ' ## EDIT THIS *'; é aí que você pode editar ao seu gosto enquanto deixa outros intocados.

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>


  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

então ...

   $ sudo service apache2 restart

e voila! Boa sorte!

EDIT: Tenha em mente - depois de configurar sites e testado para estar operacional em sua rede local, você precisa atualizar o DNS com seu provedor de serviços de DNS (onde registrou esses domínios) e atualizar seu endereço IP (onde você está hospedando sua máquina com esses multi-sites).

    
por 11.12.2013 / 10:51
1

The router does not allow port forwarding to multiple IP's using the same port (80).

Isso não é possível com o TCP / IP padrão. Você precisa de um programa, ou seja, um proxy, aceitando solicitações na porta, observando as solicitações e, em seguida, fazendo solicitações de acordo.

O Apache e outros servidores da web têm um recurso de "proxy reverso" que pode ser usado para "dividir" seu tráfego de entrada. Um proxy reverso informa ao Apache que as solicitações para um determinado caminho da Web, ou seja, "yourdomain / directory1", devem ser lançadas em outro servidor da Web e as respostas desse servidor da Web retornadas ao cliente original.

Cuidado, no entanto, se você tiver aplicativos em execução neste servidor da Web (PHP, etc.) que eles talvez precisem alterar as configurações, pois sua URL externa será diferente. Você pode ter que dizer a um aplicativo PHP que ele reside em "yourdomain / directory1" em vez de "yourdomain" para que possa gerar links corretamente. É possível dizer ao Apache para reescrever o tráfego do servidor de back-end antes de devolvê-lo ao cliente, mas isso é difícil e você deseja evitá-lo, se possível. Aplicativos que geram links com Javascript podem ser especialmente problemáticos, portanto nem todos os aplicativos da Web são facilmente "reversíveis em proxy".

Portanto, instale o Apache em uma quarta VM de "front end" - encaminhe seu TCP 80 de entrada para essa VM. Você também precisa garantir que essa VM possa alcançar suas outras VMs em sua "rede virtual". Em seguida, na sua VM "front end", você pode configurar um proxy reverso separado para cada site.

Aqui são os detalhes relevantes da configuração do Apache, usando ProxyPass e ProxyPassReverse diretivas.

Você também pode elaborar e implementar o cache, o que ajudaria no desempenho.

    
por 11.12.2013 / 16:50