Os servidores da Web possuem apenas um site cada?

do-web-servers-only-hold-one-website-each-00

Quando você começa a aprender como nomes de domínio, endereços IP, servidores da web e sites se encaixam e funcionam juntos, pode ser um pouco confuso ou opressor às vezes. Como tudo está configurado para funcionar tão bem? A postagem de hoje com perguntas e respostas sobre o superusuário tem as respostas para as perguntas de um leitor curioso.

A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser – uma subdivisão do Stack Exchange, um grupo de sites de perguntas e respostas voltado para a comunidade.

Foto cedida por Rosmarie Voegtli (Flickr) .

A questão

O leitor SuperUser user3407319 deseja saber se os servidores web possuem apenas um site cada:

Com base no que entendi sobre DNS e vinculação de um nome de domínio ao endereço IP do servidor da web em que um site está armazenado, isso significa que cada servidor da web pode conter apenas um site? Se os servidores da web contiverem mais de um site, como tudo será resolvido para que eu possa acessar o site que desejo sem problemas ou confusões?

Os servidores web mantêm apenas um site cada ou mantêm mais?

A resposta

O contribuidor do SuperUser Bob tem a resposta para nós:

Basicamente, o navegador inclui o nome de domínio na solicitação HTTP para que o servidor da web saiba qual domínio foi solicitado e possa responder de acordo.

Solicitações HTTP

Veja como acontece sua solicitação HTTP típica:

1. O usuário fornece um URL, no formato http: // host: porta / caminho.

2. O navegador extrai a parte do host (domínio) da URL e a traduz em um endereço IP (se necessário) em um processo conhecido como resolução de nome. Essa conversão pode ocorrer por meio do DNS, mas não é necessário (por exemplo, o arquivo hosts local em sistemas operacionais comuns ignora o DNS).

3. O navegador abre uma conexão TCP para a porta especificada ou padroniza para a porta 80 nesse endereço IP.

4. O navegador envia uma solicitação HTTP. Para HTTP / 1.1, é assim:

do-web-servers-only-hold-one-website-each-01

O cabeçalho do host é padrão e obrigatório em HTTP / 1.1. Ele não foi especificado na especificação HTTP / 1.0, mas alguns servidores o suportam de qualquer maneira.

A partir daqui, o servidor da web tem várias informações que pode usar para decidir qual deve ser a resposta. Observe que é possível que um único servidor da web seja vinculado a vários endereços IP.

  • O endereço IP solicitado, do soquete TCP (o endereço IP do cliente também está disponível, mas raramente é usado e, às vezes, para bloqueio / filtragem)
  • A porta solicitada, do soquete TCP
  • O nome do host solicitado, conforme especificado no cabeçalho do host pelo navegador na solicitação HTTP
  • O caminho solicitado
  • Quaisquer outros cabeçalhos (cookies, etc.)

Como você parece ter notado, a configuração de hospedagem compartilhada mais comum atualmente coloca vários sites em um único endereço IP: combinação de porta, deixando apenas o host para diferenciar os sites.

Isso é conhecido como Host Virtual Baseado em Nome no Apache-land, enquanto o Nginx os chama de Nomes de Servidor em Blocos de Servidores e o IIS prefere Servidor Virtual .

E sobre HTTPS?

HTTPS é um pouco diferente. Tudo é idêntico até o estabelecimento da conexão TCP, mas depois disso um túnel TLS criptografado deve ser estabelecido. O objetivo é não vazar nenhuma informação sobre a solicitação.

A fim de verificar se o servidor web realmente possui este domínio, o servidor web deve enviar um certificado assinado por um terceiro confiável. O navegador irá então comparar este certificado com o domínio solicitado.

Isso representa um problema. Como o servidor da web sabe qual certificado de host / site deve enviar, se precisar fazer isso antes que a solicitação HTTP seja recebida?

Tradicionalmente, isso era resolvido com um endereço IP (ou porta) dedicado para cada site que requer HTTPS. Obviamente, isso se tornou problemático, pois estamos ficando sem endereços IPv4.

Digite SNI (indicação do nome do servidor). O navegador agora passa o nome do host durante as negociações de TLS, portanto, o servidor da web tem essas informações com antecedência suficiente para enviar o certificado correto. No lado do servidor web, a configuração é muito semelhante a como os hosts virtuais HTTP são configurados.

A desvantagem é que o nome do host agora é passado como texto simples antes da criptografia e é basicamente uma informação que vaza. Isso geralmente é considerado uma compensação aceitável, embora considerando que o nome do host normalmente é exposto em uma consulta DNS de qualquer maneira.

E se você solicitar um site apenas por endereço IP?

O que o servidor web faz quando não sabe qual host específico você solicitou depende da implementação e configuração do servidor web. Normalmente, há um site “padrão”, “pega-tudo” ou “reserva” especificado que fornecerá respostas a todas as solicitações que não especificam explicitamente um host.

Este site padrão pode ser seu próprio site independente (geralmente mostrando uma mensagem de erro), ou pode ser qualquer um dos outros sites no servidor web, dependendo das preferências do administrador do servidor web.


Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui .

Recomendado:  Como adicionar o recurso “Quick Look” do OS X ao Windows