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 emnginx
.
(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
ewww.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).