diferença de balanceamento de carga entre DNS e IP - encaminhamento vs redirecionamento


9

Me deparei com uma situação que não consigo entender. Temos um firewall Fortigate que permitimos fazer balanceamento de carga em dois servidores Web Apache de backend. Um nome DNS é mapeado para o IP virtual no Load Balancer.

Como esperado, quando você navega para o nome / URL DNS (por exemplo, www.something.com), o Load Balancer exibe uma página de um dos servidores da web Apache de backend. O URL no navegador permanece www.something.com . Pelo que entendi, o Load Balancer, nesse caso, é simplesmente encaminhar pacotes entre o navegador e o Apache enquanto permanece no caminho.

No entanto, se eu procurar o endereço IP para o qual o DNS está mapeado, o Load Balancer retornará um HTTP 302 encontrado, com o cabeçalho Location definido para a URL DNS de um dos Apaches. O URL no navegador muda para o DNS do servidor backend.

Por que o Balanceador de Carga está redirecionando quando consultado por IP, mas encaminhando corretamente no caminho quando consultado por nome DNS.

Respostas:


10

Como não usei um Fortigate FW para balanceamento de carga, responderei a algumas das perguntas de maneira mais geral.

Primeiro, quanto ao seu problema, o balanceador de carga está fazendo exatamente como deveria e acho que seus servidores podem não estar configurados corretamente para responder a uma solicitação no endereço IP. Se você testar isso por trás do balanceamento de carga, poderá definir o nome de domínio no arquivo de hosts de um cliente local, por trás do firewall com o servidor e acessá-lo com o nome de domínio e o IP interno. Você provavelmente obterá o mesmo resultado que está vendo agora.

Meu palpite é que você tenha a hospedagem virtual ativada (para oferecer suporte a vários domínios em um único servidor) e o "padrão" não está servindo as mesmas páginas que o seu domínio. Você está recebendo uma página da Web de volta do servidor nos dois casos. Se precisar de ajuda para configurar o servidor da web, tente o ServerFault .

Segundo, para entrar em mais detalhes. Um balanceador de carga normalmente opera em L7 para pelo menos clusters HTTP e HTTPS. Isso significa que eles não apenas olham para o endereço IP e o encaminham, nem "redirecionam" a página.

Quando eles recebem uma solicitação, eles realmente analisam a solicitação e a encaminham para um servidor após o processamento da solicitação. Há muitas coisas que eles podem fazer neste momento, como reescrever os cabeçalhos nas duas direções, adicionar cookies (para persistência) aos dados que retornam ao cliente, encerrar sessões SSL, fazer a correspondência com base na URL etc.

Eu recomendo que você gaste algum tempo lendo completamente os documentos do fornecedor para entender melhor como o balanceamento de carga funciona (com o Fortigate, você pode ler o deles e o Coyote Point - outra empresa de balanceamento de carga que a Fortigate adquiriu). Entender o que está fazendo o ajudará em casos como esse e permitirá que você desbloqueie recursos que você nem sabia que existiam.


O problema foi uma configuração no servidor da web Apache de backend. O novo nome DNS precisava ser adicionado como um alias.
Yusuf

3

Depois de ler o balanceamento de carga baseado em host HTTP no documento Fortigate Load Balancing , posso ver como você pode ter uma configuração atípica de balanceamento de carga que pode resultar no que você descreve. No entanto, sem parte da sua configuração, não podemos ter certeza se esse é o seu caso.

Fortigar O FortiOS permite a criação de um servidor virtual vinculado a servidores reais, cada um com uma configuração de cabeçalho de host diferente . Se alguma solicitação corresponder ao VIP do seu servidor virtual, as solicitações com carga equilibrada serão direcionadas apenas aos servidores reais que corresponderem a isso host header. A parte mais importante que explica bem seus sintomas é que um dos servidores reais pode omitir o cabeçalho do host para que ele corresponda a qualquer cabeçalho do host.

O servidor real sem um cabeçalho de host pode ter sido configurado como uma espécie de "catch-all" que chega a um site que faz o redirecionamento.

Usando o exemplo abaixo, apenas o 1º e o 2º rservers manipulam o tráfego que corresponde ao seu nome DNS preferido através do cabeçalho do host, mas o 3º rserver aceita qualquer coisa que corresponda a todos os outros cabeçalhos do host, incluindo o próprio VIP do DNS e envia para um site que pode redirecionar. .

config firewall vip
 editar "http-host-ldb"
  defina o tipo server-load-balance
  set extip 192.0.2.1
  definir extintf "lan"
  definir http do tipo de servidor
  configure o host http do método ldb
  definir extport 80
  servidores reais de configuração
    editar 1
      defina o host http "www.example.com"
      definir ip 192.168.2.1
      definir porta 80
      Próximo
    editar 2
      defina o host http "www.example.com"
      definir ip 192.168.2.2
      definir porta 80
      Próximo
    editar 3
      definir ip 192.168.2.3
      definir porta 80
      Próximo
    fim
 fim

Suponho que o balanceamento de carga do firewall possa estar fazendo o redirecionamento, mas não podemos saber com as informações limitadas fornecidas.


Nesta configuração, ele está sendo definido para corresponder com base no nome. E esse é o problema. Se você for ao VIP por endereço, ele não saberá o que fazer com ele. (regras NAT normais serão aplicadas)
Ricky feixe

A principal razão pela qual eu não acredito que essa seja a resposta é que nenhum FW / load balancer que eu conheça retornará um 302 com o local definido como o nome do host / domínio do recurso interno (pelo menos sem configurá-lo especificamente para fazer isso) então, o que não parecia ser o caso com base na pergunta).
YLearn

@ RickyBeam, apenas os primeiros a rservers fazem a correspondência de nome de host. O último rserver corresponderia ao endereço VIP como host.
generalnetworkerror

@YLearn, concordo que isso seria estranho; Eu estava dizendo que o rserver, não o LB, teria feito o 302 e teria sido configurado para fazê-lo. Não conheço nenhum LB que teria feito isso.
generalnetworkerror 5/13
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.