Como configurar vários domínios para apontar para máquinas virtuais separadas com um único IP?

1

Digamos que temos dois domínios

http://www.foo.co.uk
http://www.bar.co.uk

1 IP estático público para um servidor LTS do Ubuntu 16.04 80.12.34.56 ( 192.168.0.11 localmente)

E duas instâncias do servidor KVM Ubuntu 16.04 LTS em execução na mesma máquina em 192.168.0.17 e 192.168.0.18

Como alguém poderia redirecionar o tráfego de foo.co.uk para 192.168.0.17 enquanto mantém o tráfego de bar.co.uk a 192.167.0.18 ?

Edit: Este é o meu arquivo /sites-available/proxy_server.conf agora

<VirtualHost *:80>

   ProxyRequests Off
   ProxyPreserveHost On

   <Proxy *>
      Order deny,allow
      Allow from all
   </Proxy>

   ProxyPass / http://192.168.0.18:8080/
   ProxyPassReverse / http://192.168.0.18:8080/
   ServerName syphonx.localhost

   CustomLog /var/log/apache2/access.log combined
   ErrorLog /var/log/apache2/error.log

</VirtualHost>

Isso produz erros no meu arquivo error.log como este

[proxy:error] [pid 7701:tid 139952398472960] (113)No route to host: AH00957:     HTTP: attempt to connect to 192.168.0.18:8080 (192.168.0.18) failed

[proxy:error] [pid 7701:tid 139952398472960] AH00959: ap_proxy_connect_backend disabling worker for (192.168.0.18) for 60

[proxy_http:error] [pid 7701:tid 139952398472960] [client ##.#.##.##:55331] AH01114: HTTP: failed to make connection to backend: 192.168.0.18

Eu tentei fazer um ping entre eles, mas parece que a rede para as duas instâncias do KVM em * .17 e * .18 está configurada de tal forma que não consigo acessá-las.

    
por Syphonx 17.10.2016 / 17:27

1 resposta

1

Isso soa um pouco como a configuração que tenho na minha rede. Tenho vários serviços voltados para a web nos meus servidores domésticos, mas em diferentes IPs do sistema.

Eu tenho um servidor nginx dedicado em um sistema que lida com todo o tráfego de entrada no IP público através das portas 80 e 443 e proxies reversos para os servidores backend na minha rede onde as coisas estão (que são Apache, nginx e lighttpd, por isso não é necessariamente específico para os backends). Atualmente, faço isso para uma instância do GitLab e uma instância OwnCloud em endereços IP separados e um servidor que está atualmente desativado (anteriormente executava uma instância de teste do MediaWiki).

  

NOTA: Esta resposta foi escrita com a ideia de que o sistema que faz o proxy reverso definido abaixo é um sistema separado e não uma das suas configurações de servidor existentes. Se for um dos seus servidores existentes, não altere as configurações existentes, exceto para adicionar um novo para o site individual não nesse servidor, em vez de definir novas configurações para cada servidor. Eu também sugiro o uso de nginx ; você pode fazer isso em qualquer servidor web que você quiser, eu só sei como fazer isso rapidamente em nginx .

(1) Instale nginx em um dos servidores ou configure outro

Eu uso nginx e% variante nginx-core para isso, mas você pode usar o Apache ou qualquer servidor da Web com o qual esteja familiarizado e saiba como configurar (mas como eu uso nginx , estou usando nginx instruções aqui). Eu também uso o ssl-cert para criar um certificado auto-assinado de lixo para o padrão pegar tudo para usar.

sudo apt-get install nginx nginx-core ssl-cert

(2) Configure esse servidor nginx para um pega-tudo 'padrão' para domínios inválidos.

Primeiro, vamos fazer algumas alterações para o site padrão "pega-tudo".

sudo rm /etc/nginx/sites-enabled/default
sudo touch /etc/nginx/sites-available/catch-all

Coloque isso no arquivo /etc/nginx/sites-available/catch-all :

server {
    listen 80 default_server;
    listen 443 ssl default_server;

    server_name _;

    include snippets/snakeoil.conf;

    return 404;
}

Este é um padrão 'capturar tudo' para qualquer tipo de conexão com o endereço IP para qualquer domínio que não tenhamos configurado na instância nginx para escutar as conexões. Dessa forma, podemos exibir "Não encontrado" para qualquer domínio inválido sendo direcionado aqui. Vamos definir explicitamente todos os domínios que dizemos estarem OK em arquivos de configuração individuais. Por enquanto, porém, vamos ativar essa captura e começar a configurar domínios individuais.

sudo ln -s /etc/nginx/sites-available/catch-all /etc/nginx/sites-enabled/

(3) Configure o nginx para sites permitidos individuais e seus proxies reversos

  

Para este exemplo, vou usar www.foo.co.uk e www.bar.co.uk por sua postagem.

Basicamente, vou dar um arquivo de exemplo que você pode usar para a configuração do proxy reverso. Isso deve funcionar com a maioria das configurações de proxy reverso, embora os sites individuais que você está executando possam ter pequenas nuances com as quais não posso ajudar aqui.

Para cada site que você deseja inverter o proxy, comece criando o arquivo com o nome de domínio. Eu vou usar os dois domínios que você declarou como exemplos.

sudo touch /etc/nginx/sites-available/{www.foo.co.uk,www.bar.co.uk}

Em cada um dos dois arquivos criados, você pode colocar isso em prática. Basta atualizar as informações de acordo onde quer que estejam meus comentários (eles são precedidos por # ):

server {
    listen 80;

    server_name DOMAINNAME;  # Replace DOMAINNAME with the actual domain

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;

        # Replace this INTERNALIPADDRESS:PORT with the IP and port
        # combination for the server on your network handling the
        # above-specified domain name.
        proxy_pass http://INTERNALIPADDRESS:PORT/;
    }
}

Uma vez criada, precisamos mais uma vez ativá-la.

sudo ln -s /etc/nginx/sites-available/www.foo.co.uk /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/www.bar.co.uk /etc/nginx/sites-enabled/

Agora que ativamos os sites, vamos garantir que não haja erros de configuração aqui. Se este comando mostrar algo diferente de 'a sintaxe do arquivo de configuração está ok' e 'o teste do arquivo de configuração for bem-sucedido', será necessário resolver esses erros:

sudo nginx -t

Se não houver avisos de erro e você receber as mensagens "OK" e "Bem-sucedido", reinicie o processo nginx para que todas as configurações entrem em vigor.

Ubuntu 14.04 e anteriores:

sudo service nginx restart

Ubuntu 16.04:

sudo systemctl restart nginx

(4) Configure o encaminhamento de porta em sua rede para encaminhar as portas 80 e 443 para o servidor em que você acabou de configurar este servidor de proxy reverso.

No exemplo que acabei de escrever, digamos que o servidor que eu coloquei nginx é 192.168.100.200. No roteador, configure a porta 80 e a porta 443 para rotear para esse endereço IP. Se você não pretende usar o HTTPS, apenas envie a porta 80.

(5) Aponte o DNS dos seus domínios para o seu endereço IP público em sua casa.

Isso é bastante evidente, mas certifique-se de que o registro A do DNS aponte para o endereço IP que o roteador lhe fornece na Internet pública. (Vá para ipchicken.com ou similar para obter seu endereço IP se você não souber)

(6) Você está pronto assim que o DNS se propaga. Teste de qualquer sistema NÃO na sua rede doméstica (como um computador em um wifi público em um café ou algo assim).

    
por Thomas Ward 18.10.2016 / 02:32