2 servidores diferentes ouvindo a mesma porta e o mesmo IP público

0

Estou executando duas VMs que estão ouvindo as portas 80/443. Eu tenho apenas um IP público e vários subdomínios que estão apontando para o meu IP público. Eu gostaria de ser capaz de acessar as duas VMs nas portas 80/443.

O cenário que tenho em mente é de alguma forma envolver uma terceira VM que receberá as solicitações 80/443 do mundo externo e redirecioná-las de acordo com as VMs. Essa terceira VM poderia atuar como um "Proxy" que fará as solicitações nas VMs usando o IP local que não envolve portas. Não tenho certeza se isso é possível, mas estou aberto a qualquer sugestão.

    
por Bobys 06.12.2017 / 20:16

2 respostas

1

The scenario I have in mind is to somehow involve a third VM which will receive the 80/443 requests from the outside world and redirect them accordingly to the VMs.

Você definitivamente está olhando para o caminho certo. Pessoalmente, eu usaria algo como HAProxy para atingir seu objetivo. A implementação real dependeria de suas necessidades / ambiente.

A forma mais simples seria usar um conjunto diferente de portas para um servidor (como 1080/1443) e redirecionar o tráfego de acordo. Isso pode ser feito em praticamente qualquer servidor proxy ou gateway de roteador / NAT.

Usando o HAProxy ou software similar, você pode ficar tão complicado quanto quiser. Alguns exemplos de como você pode designar tráfego para ir para um servidor ou outro:

  • URL usada na solicitação (por exemplo, solicitações de / app1 / o que for para o servidor 1, padrão para o servidor 2)
  • IP de origem que faz a solicitação
  • Tipo de arquivo sendo solicitado (todas as solicitações de arquivos .php vão para o servidor 2)
  • Agente do usuário fazendo a solicitação (todo o tráfego do iPhone vai para o servidor 2)
  • Praticamente qualquer outro aspecto dos cabeçalhos que você usa
  • Uma combinação de qualquer ou todos os itens acima

Existem muitos artigos e tutoriais sobre o uso de HAProxy para fazer muitas coisas (incluindo aqui em vários SE sites). Por exemplo, aqui está uma postagem simples sobre roteamento de tráfego com base em URLs . Ou um exemplo em ServerFault que é baseado em IP de origem . O Google será seu amigo quando encontrar exemplos do que você pode fazer.

Sugiro que verifique a documentação para tudo o que você puder fazer.

    
por 06.12.2017 / 23:00
1

O que você está propondo é totalmente prático e comum. Um dos termos usados para descrever o que você está fazendo é "proxy reverso". Existem algumas maneiras de conseguir isso, incluindo o uso do Apache e do Squid.

Por causa da maneira como o http funciona, você não pode simplesmente fazê-lo em um nível de firewall (simples / do tipo iptables) - você precisa interceptar os pacotes para ler o cabeçalho.

O https adiciona complexidade adicional, e você pode querer considerar https externamente para http internamente - por causa da sobrecarga adicional e das complexidades com certs.

O bit no seu diagrama sobre DNS não está claro. Você teria DNS externo e, em seguida, usaria regras específicas no servidor proxy para mapear domínios para o servidor http (s) final.

    
por 06.12.2017 / 21:04