Por que digitar um endereço IP em vez do nome de domínio correspondente não mostra o site? [fechadas]

38
> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

Eu digito em 93.184.216.34vez de http://example.comno Chrome. Não carrega o site. Por quê?

PerrierCitror
fonte
Como regra geral, os seres humanos nunca devem usar endereços IP, a menos que configurem um servidor real.
David Richerby
Vale enfatizar que você fez obter uma resposta do servidor: uma resposta 404 HTTP. Isso significa que ele encontrou com êxito o host (o computador do outro lado) e algum servidor da Web (eu acho que algo de código aberto rodando no Linux, como o Nginx) rodando nesse host enviou dados.
precisa saber é

Respostas:

107

Como o Hostcabeçalho HTTP adequado geralmente é necessário para realmente obter o site pretendido.

É muito comum hospedar vários sites no mesmo endereço IP e distinguir entre eles com base no Hostcabeçalho HTTP especificado pelo cliente (além do valor TLS SNI atualmente no caso de HTTPS).

Ou seja, quando você entrou http://example.comno navegador, o Hostcabeçalho era example.com, mas esse não é o caso quando você entrou 93.184.216.34. Você alcança o mesmo servidor da Web em ambos os casos, mas recebe respostas diferentes (nesse caso específico 200 x 404).

Håkan Lindqvist
fonte
4
Alguém poderia expandir um pouco sobre o que Hostfaz e para que servidores da Web geralmente o usam? É meio difícil pesquisar on-line porque essa palavra está sobrecarregada.
precisa saber é o seguinte
1
tools.ietf.org/html/rfc7230#section-5.4 Um servidor http processa um cabeçalho de host como desejar. O httpd, por exemplo, possui diretivas de configuração do VirtualHost.
John Mahowald
19
@SergiyKolodyazhnyy Sure. Você poderia curl -H "Host: example.com" http://93.184.216.34/ou algo assim.
Håkan Lindqvist
13
Parafraseando - "não existe um relacionamento individual entre URLs para sites e endereço IP".
Pete
1
De fato, esse servidor específico (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) lida com pelo menos example.com example.net example.org example.edu os mesmos endereços, motivo pelo qual ele realmente precisa do nome no cabeçalho Host.
Dave_thompson_085
14

Como geralmente os servidores da Web usam a tecnologia "servidor virtual" e são capazes de responder à sua solicitação HTTP exatamente dentro do nome do domínio solicitado, mas não do endereço IP dos servidores da Web. Graças a ocultar mais de um nome de domínio em um endereço IP.

Por exemplo, o servidor da web Apache pode responder à sua solicitação HTTP com um endereço IP usando a seção:

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

ou se nenhum VirtualHost usado na configuração.

O recurso VirtualHost no Apache foi introduzido em 1996.

Алексей Лебедев
fonte
10

No Apache , você pode hospedar muitos sites usando apenas um único endereço IP. Isso é chamado de hospedagem virtual. É assim que os subdomínios podem ser criados, mesmo domínios independentes. Isso é feito configurando um arquivo de configuração do Apache contendo diretivas do VirtualHost para cada domínio / subdomínio.

Um servidor HTTP de exemplo que possui dois hosts virtuais, exemplo1.com e exemplo2.com pode se parecer com isso (definição de endereço IP):

<VirtualHost 93.184.216.34:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost 93.184.216.34:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

Também pode ser assim (definição baseada em nome):

<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

Nos dois casos, dois registros de host virtual são criados internamente na memória e usados ​​pelo Apache para comparar quando chega uma solicitação de URI.

Quando um usuário digita o endereço IP por meio de um agente, o primeiro host virtual listado no arquivo de configuração é usado como o domínio principal (por exemplo, neste caso exemplo1.com).

Quando um usuário digita um nome de domínio, a solicitação é enviada para uma rede DNS da Internet pública (ICANN) que fornece o endereço IP associado a ele. Você registrou os dois através de um registrador da ICANN (como o GoDaddy). Você deve corrigir os dois e dar um tempo antes que a propagação ocorra em todos os servidores DNS na rede da ICANN. Hoje em dia, pode demorar até 24 horas.

Quando a solicitação é roteada para o servidor HTTP Apache, o endereço IP e o nome do domínio são comparados com a lista de registros internos do VirtualHost. Quando um é encontrado, a raiz do documento é usada para formar o caminho completo do sistema de arquivos para o recurso do objeto para retornar ao agente do usuário. Caso contrário, um HTTP 404 é enviado junto com qualquer documento de erro associado a ele.

Kerry Kobashi
fonte
8

Eu gosto de usar a terminologia "casa".

Você pode facilmente enviar uma carta para uma casa sem um nome e ela chegará à casa.

Se você colocar o nome da pessoa, estará enviando para o destinatário pretendido.

O destino é o mesmo, mas como é tratado quando chega em casa é diferente.

Quando você especifica o site, ou seja, www.example.com, o servidor sabe como lidar com a solicitação e em qual host ele se destina e em qual site servir de volta.

Chris Lomax
fonte
Esta é uma metáfora útil!
Redwolf Programs
+1 Gosto da ideia do nome do destinatário. Eu estava pensando em uma analogia semelhante, mas com o endereço IP identificando o prédio físico (computador), mas o número do apartamento (nome de domínio) identificando o destinatário real em edifícios com vários inquilinos. Obviamente, essa é uma simplificação excessiva e os computadores com vários proprietários podem ter o servidor de endereço IP apenas em um site padrão, mas acho que essa é uma boa analogia.
precisa saber é o seguinte
0

O termo principal a ser pesquisado é "hospedagem virtual baseada em nome".

As pessoas desejam alocar vários nomes de host para o mesmo servidor da web e veicular conteúdo diferente para cada nome de host. Isso é conhecido como hospedagem virtual (não deve ser confundido com o conceito mais recente de máquinas virtuais).

Inicialmente, a hospedagem virtual era feita alocando vários endereços IP para o servidor; o servidor podia enviar conteúdo diferente com base no endereço IP usado, mas isso era considerado um desperdício.

Portanto, o cabeçalho "host" foi introduzido, inicialmente como uma extensão, mas depois tornou-se uma parte obrigatória da especificação http 1.1 em 1997. Esse cabeçalho especifica o nome do host que o cliente solicitou. O servidor pode então exibir conteúdo diferente com base no valor do cabeçalho.

Peter Green
fonte
"mas isso foi visto como um desperdício." Somente para conexões legadas v4. Agora é possível configurar todos os hosts virtuais em um endereço v6 diferente.
Qwertie
1
Ainda estamos muito longe do ponto em que tornar seus serviços voltados ao público apenas para IPv6 é uma coisa razoável a se fazer.
Peter Green
0

Para manter os custos baixos para servidores web, muitos servidores hospedam vários sites. Eles fazem isso usando hosts virtuais, ou Vhosts, no apache2 / nginx / etc. Portanto, se você for diretamente para o endereço IP do site, provavelmente receberá uma tela "O Apache está funcionando" ou possivelmente será redirecionado para o site principal do servidor.

Um Vhost examina o endereço do site recebido e o compara aos nomes ServerName ou ServerAlias ​​nos arquivos Vhosts ativados. Se um deles corresponder, esse site específico será carregado.

A menos que o site tenha uma carga enorme (alto número de visitantes únicos / visualizações de página) ou gerencie aplicativos de alta carga (pense em youtube.com, facebook etc.), é provavelmente mais econômico operar em um servidor compartilhado. Seria um desperdício de dinheiro adquirir um servidor dedicado (a partir de US $ 60 / mês) apenas para executar um site de blog do Wordpress. É melhor obter uma plataforma compartilhada em um servidor com provavelmente mais de 200 sites em um servidor. Os custos serão maiores na área de US $ 5 / mês.

Outro motivo para fazer isso é a falta de endereços IP. Simplesmente não há endereços IPv4 suficientes. É apenas através do uso do NAT para redes domésticas / comerciais e do uso do Vhosts que restamos algum. Mesmo quando o IPv6 se tornar o fluxo principal, os servidores provavelmente seguirão o Vhosts (custos do servidor).

Joseph Williams
fonte
0

Um endereço IP dedicado é caro, enquanto a criação de um novo site em um servidor é basicamente gratuita.

O que acontece é que a empresa de hospedagem aluga um único endereço IP que aponta para um servidor físico e hospeda milhares de sites nesse endereço IP usando o recurso "host virtual"

Pense como uma caixa postal, se você apenas escrever o endereço da agência postal, mas sem o número da caixa, o correio não será entregue.

Magnetic_dud
fonte
0

Há muitas respostas aqui com detalhes técnicos, mas acho que a explicação mais simples de alto nível é que, mesmo que um servidor Web esteja escutando adequadamente o tráfego http em seu endereço IP, o servidor geralmente também deve ser configurado para responder a um domínio específico nome e esse nome deve estar na solicitação enviada pelo cliente (ou seja, o navegador da web)

Eu digo "normalmente", porque quase sempre é feito dessa maneira, mas na verdade existem métodos nos quais você pode configurar o servidor http para responder se apenas o endereço IP for usado.

Christopher Hunter
fonte
-1

Precisamos entender as diferenças entre IPs virtuais e IPs dedicados.

Se um site tiver um IP dedicado (não compartilhado), (por exemplo) http://123.456.789.012 exibirá o site.

Tente isso, que é o endereço IP dedicado de um site que eu possuo, www.negativeiongenerators.com: http://75.126.128.174 Mas, como outros já disseram, geralmente não é uma boa idéia.

Mike Waters
fonte
1
Isso não é universalmente verdade. Depende da configuração do servidor web. Você pode ter um endereço IP dedicado e ainda não responder ao IP sem o host, e também pode ter um endereço IP compartilhado e o endereço IP apontar para um dos sites no servidor. Também não há nada errado em permitir o acesso a um site apenas através do seu endereço IP, embora também não seja particularmente útil.
Qwertie