Questão Os servidores possuem apenas um site?


Pelo que entendi o link DNS do nome de domínio com o endereço IP do servidor que o site está armazenado, isso significa que cada servidor só pode ter um site? Se eles não o fizerem, como chamar o endereço IP do servidor sabe qual site eu quero se houver muitos no mesmo servidor?


79


origem


Wikipedia tem uma boa introdução para Hospedagem Compartilhada. Se você digitar http: // <IP_ADDR> / no seu navegador, a solicitação HTTP não terá um domínio dentro do Host: cabeçalho. No caso de hospedagem compartilhada, o servidor da web pode ser configurado pelo provedor para lidar com isso de maneiras diferentes (por exemplo, ter um padrão, redirecionar para o provedor etc.). - Jedi
Eu cliquei em links que quebram com mensagens como "este servidor nunca / atualmente não hospeda o site que você está procurando". - aitchnyu
Caso você esteja procurando uma maneira de executar vários aplicativos em um único servidor - digamos que você tenha dois aplicativos MyApp e YourApp nas portas 8001 e 8002, respectivamente. Você pode ter dois balanceadores de carga ou proxies de aplicativo em: myapp.com e yourapp.com. Peça-lhes que recebam pedidos nas portas padrão (80/443) e encaminhem-no para o (s) servidor (es) real (is) nas portas 8001 e 8002, respectivamente. - rohithpr
Ótima pergunta. Cada site costumava precisar de seu próprio endereço IP (um servidor pode ter mais de um endereço IP). O cabeçalho do host em HTTP / 1.1 foi introduzido para contornar o problema exato que você descreve. Consulte "Conservação de endereços da Internet" em www8.org/w8-papers/5c-protocols/key/key.html - A E
Se o http 1.1 não tivesse o cabeçalho do host, o ipv6 seria implementado agora ;-) :-( - Lenne


Respostas:


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 acontece a sua solicitação HTTP típica:

  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. Esta tradução pode ocorrer via DNS, mas não precisa (por exemplo, o local hosts arquivo em sistemas operacionais comuns ignora 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, parece com isso:

    GET /path HTTP/1.1
    Host: example.com
    

    (O Host header é padrão e requerido no HTTP / 1.1. 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 Host cabeçalho 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?

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 esse domínio, o servidor deve enviar um certificado assinado por um terceiro confiável. O navegador irá então comparar este certificado com o domínio solicitado.

Isso apresenta um problema. Como o servidor sabe qual certificado do host (site) deve ser enviado, 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.

Entrar 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 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 é 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.


149



Além disso, um site pode ser dividido em vários servidores, como é o caso dos balanceadores de carga, como o Heroku e o Amazon usam. - phyrfox
@phyrfox Sim, eu pensei em adicionar isso, mas está apenas tangencialmente relacionado à pergunta e eu não queria fazer a resposta por muito tempo. Ainda pode acabar adicionando uma seção para isso mais tarde. - Bob
Diz a lenda que os subdomínios apontam para computadores específicos dentro de uma rede. Em teoria - Loupax
"Tradicionalmente, isso foi resolvido com um endereço IP dedicado (ou porta) para cada site que requer HTTPS. Obviamente, isso se torna problemático à medida que começamos a ficar sem endereços IPv4." Então, sem esse invencionamento, todos nós teríamos o IPv6 agora . - Lenne


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. (Uma gravação)

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" e, em seguida, você deve procurar mais pelo número do Dormitório X. Este é um registro CNAME.

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

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

  • 400 Não consigo te entender.

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

  • 500 Nosso sistema de telefonia foi quebrado.


92



Para os curiosos, o RFC por trás do 418 é tools.ietf.org/html/rfc2324 e um artigo interessante sitesdoneright.com/blog/2013/03/… :) - Wordzilla


Pelo que entendi o link DNS do nome de domínio com o endereço IP do servidor que o site está armazenado, isso significa que cada servidor só pode ter um site?

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 origem ou 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 espalhado por vários nomes de host.

Se eles não o fizerem, como chamar o endereço IP do servidor sabe qual site eu quero se houver muitos no mesmo servidor?

Antigamente (HTTP 1.0 e antes), cada nome de host que o servidor queria manipular de maneira diferente tinha que ter seu próprio endereço IP. Isso foi um pouco exagerado.

HTTP 1.1 adicionou o Host"cabeçalho como um campo obrigatório na solicitação HTTP (IIRC alguns fornecedores já tinham suportado isso anteriormente como uma extensão). Isso informava ao servidor qual nome de host tinha sido solicitado e, portanto, permitia que ele exibisse conteúdo diferente para diferentes nomes de host no mesmo endereço IP. 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 através do uso do SubjectAltName campo ou o uso de curingas no CommonName campo. No entanto, isso representa desafios administrativos, especialmente se os nomes de host envolvidos estiverem em domínios com propriedade diferente.

Então, 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.


6



Você esqueceu de mencionar que o TCP pode escutar em muitas portas, executando servidores diferentes em cada ... - Toby Speight
Sim, mas você não tem portnumbers no dns, e você não pode esperar que joe.p.user vá para our.fabulous.site:81 Além disso, alguns firewalls bloqueiam o acesso de saída a números de portas não padrão. - Lenne


A resposta é um pouco mais complicada do que algumas das respostas conseguiram ser. Quando você executa uma pesquisa de DNS, você DEVE obter um endereço IP (A gravar 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 é o que você está perguntando (algumas das outras questões abordadas sobre isso, mas não em detalhes). 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 esta

<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). Nós então dizemos que este é o domain.com site e em qual diretório esse site mora. 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 (ou seja, PHP, ASP.NET, etc) e esse único script determinará qual site e página exibir.


3





Usando o DNS, você pode atribuir tantos nomes a um endereço IP individual quanto quiser 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 atendido examinando A URL solicitada. 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.


1





O servidor da Web possui o conceito do contêiner host (Aqui é a documentação do 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 do tipo.

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.


0





O endereço IP do seu servidor pode conter vários 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 encontrar os dados do site que ele deve enviar de volta.

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

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


0