Os servidores possuem apenas um site?

79

A partir do que eu entendo, o DNS vincula o nome de domínio ao endereço IP do servidor em que o site está armazenado. Isso significa que cada servidor pode ter apenas um site? Se não, como chamar o endereço IP do servidor sabe qual site eu quero se houver muitos no mesmo servidor?

    
por user3407319 18.06.2016 / 05:02

7 respostas

149

Basicamente: o navegador inclui o nome do domínio na solicitação HTTP, portanto, o servidor da Web sabe qual domínio foi solicitado e pode responder de acordo.

Solicitações HTTP

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

  1. O usuário fornece uma URL, no formulário http://host:port/path .

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

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

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

    GET /path HTTP/1.1
    Host: example.com
    

    (O cabeçalho Host é padrão e requerido no HTTP / 1.1. Ele não foi especificado na especificação HTTP / 1.0, mas alguns servidores o suportam mesmo assim.)

A partir daqui, o servidor da Web tem várias informações que podem ser usadas 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 isso raramente é usado - às vezes, para bloquear / filtrar
  • A porta solicitada, do soquete TCP
  • O nome do host solicitado, conforme especificado no cabeçalho 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 portas, deixando apenas Host para diferenciar entre sites.

Isso é conhecido como Host virtual baseado em nome no Apache-land, enquanto o Nginx os chama Nomes de servidores em blocos de servidores e o IIS prefere Servidor virtual .

E quanto ao HTTPS?

O HTTPS é um pouco diferente. Tudo é idêntico ao 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.

Para verificar se o servidor possui realmente este domínio, o servidor deve enviar um certificado assinado por um terceiro confiável. O navegador comparará esse certificado com o domínio solicitado.

Isso apresenta um problema. Como o servidor sabe qual certificado do host (site) enviar, se ele precisa fazer isso antes que a solicitação HTTP seja recebida?

Tradicionalmente, isso foi resolvido com um endereço IP dedicado (ou porta) para todos os sites que exigem HTTPS. Obviamente, isso se torna problemático à medida que começamos a ficar 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 tem essas informações com antecedência suficiente para enviar o certificado correto. No lado do servidor, a configuração é muito parecida com a configuração dos hosts virtuais HTTP.

A desvantagem é que o nome do host agora é passado como texto sem formatação antes da criptografia e é essencialmente uma informação que vazou. Isso geralmente é considerado uma troca aceitável, 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 faz quando não sabe qual host específico você solicitou depende da implementação e configuração do servidor. Normalmente, há um site "default", "catchall" ou "fallback" especificado que fornecerá respostas a todas as solicitações que não especificarem explicitamente um host.

Esse 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, dependendo da preferência do administrador do servidor.

    
por 18.06.2016 / 05:11
92

Eu tenho essa explicação para pessoas não tecnológicas.

Jack, Jill e Joe moram em um dormitório, e eles não têm celulares.

Na lista telefônica, todos eles são listados com o mesmo número. (Registro A)

Você disca o número e alguém pega o telefone; você diz "eu gostaria de falar com Jill", e você a coloca na linha.

Em vez de um registro A (um número de telefone / endereço IP) na lista telefônica, ele pode apenas dizer "Dormitório X". Depois, você deve procurar o número do dormitório X. Este é um registro CNAME.

Se Jill não estiver disponível, você poderá obter

  • 404 Jill não está aqui
  • 410 Jill está morta.
  • 301 Jill é morar com Peter
  • 302 Jill está visitando Peter, ligue para ele

  • 400 Não consigo entender você.

  • 401 Quem é você? Qual é a senha? ou Não permitimos visitantes masculinos depois das 22h
  • 402 Pagamento exigido (tem certeza de que Jill é seu nome verdadeiro ;-))
  • 403 Não, essa não é a senha correta.
  • 418 Jill é um bule: -)
  • 429 Jill não pode receber mais chamadas.
  • 451 Você está violando sua ordem de restrição.

  • 500 Nosso sistema de telefonia foi interrompido.

por 18.06.2016 / 19:15
6

As from what I understand the DNS link the domain name with the IP address of the server the website is stored on, does that mean each server can only hold one website?

Primeiro, você precisa entender que há vários conceitos distintos aqui.

  • Web site, um grupo de páginas da Web que formam um todo coerente.
  • Endereço IP, um endereço numérico (32 bits para IPv4, 128 bits para IPv6) usado pelo protocolo da Internet como a origem ou o destino do tráfego.
  • Servidor, uma máquina cujo trabalho é atender a solicitações de clientes.
  • Nome do host, um nome usado para identificar uma máquina no DNS (por exemplo, "www.example.com" ou "en.wikipedia.org")

Não existe uma relação de um-para-um entre qualquer uma dessas coisas. Um servidor pode ter vários endereços IP; vários nomes de host podem apontar para um endereço IP; um nome de host pode apontar para vários endereços IP. Vários sites podem estar sob o mesmo nome de host. Um site pode ser distribuído por vários nomes de host.

If they don't, how does calling the server's IP address know which website I want if there are many on the same server?

Nos velhos tempos (HTTP 1.0 e antes), cada nome de host que o servidor queria manipular de forma diferente tinha que ter seu próprio endereço IP. Isso foi um desperdício.

O HTTP 1.1 adicionou o cabeçalho Host "como um campo obrigatório na solicitação HTTP (IIRC alguns fornecedores tinham anteriormente suportado isso como uma extensão). Isso informava ao servidor qual nome de host tinha sido solicitado e, portanto, permitia que ele servisse conteúdo diferente para nomes de host diferentes no mesmo endereço IP.O suporte para HTTP 1.1 em clientes agora é onipresente.

Infelizmente, o SSL (mais tarde TLS) adicionou uma ruga. Estabelecer uma sessão SSL / TLS requer que o servidor apresente um certificado ao cliente que cubra o nome do host solicitado, mas a solicitação HTTP não chega até depois que a sessão SSL / TLS é estabelecida.

É possível ter um certificado abrangendo vários nomes de host por meio do uso do campo SubjectAltName ou do uso de curingas no campo CommonName . No entanto, isso representa desafios administrativos, especialmente se os nomes de host envolvidos estiverem sob domínios com propriedade diferente.

O TLS introduziu a extensão "indicação do nome do servidor" (SNI). Com essa extensão, o cliente envia o nome do host solicitado para o servidor durante o procedimento de handshake de TLS. O servidor pode então apresentar o certificado apropriado. Infelizmente, embora as versões atuais de todas as principais implementações de SSL / TLS suportem o SNI, demorou muito para que as versões mais antigas ficassem sem uso.

    
por 19.06.2016 / 07:23
3

A resposta é um pouco mais complicada do que algumas das respostas conseguiram. Quando você executa uma pesquisa de DNS, você DEVE obter um endereço IP ( A record para IPv4, AAAA para IPv6). Você tem que ser capaz de abrir um socket sobre TCP / IP para comunicar ou a coisa toda falha. Esse endereço pode representar um servidor ou pode representar um balanceador de carga. Pode até representar um proxy. Se o host estiver por trás do CloudFlare, por exemplo, o endereço que você recebe é de um servidor CloudFlare. O servidor real está em outro lugar. Isso permite que o host evite problemas como ataques de negação de serviço.

Hospedagem virtual é sobre o que você está perguntando (algumas das outras questões abordadas sobre isso, mas não em qualquer detalhe). A hospedagem virtual aceita a solicitação da Web e analisa o nome do host (por exemplo, domain.com) para determinar qual site deve ser exibido. Então, no servidor web Apache HTTP , você teria uma configuração como essa

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com

    DocumentRoot /var/www/domain.com
</virtualHost>

Isso é simplificado, por exemplo. Então, estamos dizendo ao Apache para ouvir na porta 80 de qualquer IP (na máquina virtual moderna que hospeda o IP da sua máquina pode ser diferente do seu IP ao vivo). Em seguida, informamos que este é o site domain.com e em qual diretório esse site se encontra. Podemos então repetir este bloco várias vezes para dizer ao Apache para lidar com sites diferentes. Todo servidor da Web suporta esse tipo de sistema.

Outra maneira de lidar com isso seria dizer ao servidor da Web para direcionar todo o tráfego da Web para um único script de programação (isto é, PHP, ASP.NET, etc) e então esse único script determinará qual site e página exibir. / p>     

por 20.06.2016 / 22:54
1

Usando o DNS, você pode atribuir quantos nomes quiser a um endereço IP individual (no seu arquivo hosts você pode simplesmente separar cada nome com espaços, por exemplo). Usando um servidor DNS, você também pode atribuir vários endereços IP a um único nome . Não está limitado a um relacionamento um-para-um.

Um servidor da web sabe qual site deve ser exibido por como examinar o URL solicitado. Ele verifica em qual domínio foi solicitado, a porta que foi solicitada e qual protocolo foi usado. Isso não tem nada a ver com DNS e é tratado pelo protocolo HTTP.

    
por 18.06.2016 / 05:15
0

O servidor da Web tem o conceito do contêiner de host ( aqui é o documentação para o Tomcat, por exemplo). Vários contêineres de host podem ser configurados para a mesma caixa / endereço IP, atendendo vários domínios. Os contêineres têm diretórios de trabalho independentes, domínios de autenticação, diretórios de log e coisas semelhantes.

O servidor encontra o contentor relevante para o novo pedido de compra, o nome do domínio faz parte deste pedido HTTP.

Instâncias do servidor da web completamente diferentes podem compartilhar o mesmo endereço IP se forem executadas em portas diferentes. Isso é usado principalmente em vários ambientes de desenvolvimento e teste em que os nomes de domínio podem não estar disponíveis, pois o servidor de produção não pode ser executado na porta arbitrária.

Por fim, mesmo que o endereço IP estritamente exclusivo seja necessário para um site, uma caixa de servidor geralmente tem vários adaptadores de rede, sendo configurada para usar vários endereços IP.

    
por 20.06.2016 / 09:49
0

O endereço IP do seu servidor pode conter muitos nomes de domínio diferentes ao mesmo tempo.

Quando você acessa o site, seu navegador envia a solicitação HTTP com nome de domínio, e o servidor pode descobrir quais dados do site ele deve enviar para você.

Ele é chamado de hosts virtuais, tão simples assim:)

Dê uma olhada aqui para mais informações sobre DNS e hosts virtuais.

    
por 23.07.2016 / 08:59