¿Por qué escribir una dirección IP en lugar del nombre de dominio correspondiente no muestra el sitio web? [cerrado]

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

Escribo en 93.184.216.34lugar de http://example.comen Chrome. No carga el sitio web. ¿Por qué?

PerrierCitror
fuente
Como regla general, los humanos nunca deben usar direcciones IP, a menos que configuren un servidor real.
David Richerby
Cabe destacar que se hizo obtener una respuesta del servidor: una respuesta 404 de HTTP. Esto significa que encontró con éxito el host (la computadora en el otro lado) y algún servidor web (supongo que algo de código abierto que se ejecuta en Linux, como Nginx) que se ejecuta en ese host envió datos.
jpmc26

Respuestas:

107

Porque el HTTP apropiado Host menudo se requiere el encabezado para obtener el sitio deseado.

Es muy común alojar múltiples sitios web en la misma dirección IP y distinguirlos según el HTTP Host encabezado especificado por el cliente (así como el valor TLS SNI hoy en día en el caso de HTTPS).

Es decir, cuando ingresó http://example.comen su navegador, el Hostencabezado era example.com, pero ese no es el caso cuando ingresó 93.184.216.34. Llegas al mismo servidor web en ambos casos, pero recibes respuestas diferentes (en este caso particular 200 vs. 404).

Håkan Lindqvist
fuente
44
¿Podría alguien ampliar un poco sobre qué Hosthace y para qué servidores web generalmente lo usan? Es un poco difícil buscar en línea porque esa palabra está muy sobrecargada.
user1717828
1
tools.ietf.org/html/rfc7230#section-5.4 Un servidor http procesa un encabezado de Host como quiera. httpd, por ejemplo, tiene directivas de configuración de VirtualHost.
John Mahowald
19
@SergiyKolodyazhnyy Claro. Podrías curl -H "Host: example.com" http://93.184.216.34/o algo así.
Håkan Lindqvist
13
Parafraseando: "no existe una relación uno a uno entre las URL de los sitios web y la dirección IP".
Pete
1
De hecho, ese servidor en particular (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) maneja al menos example.com example.net example.org example.edu las mismas direcciones, por lo que realmente necesita el nombre en el encabezado Host.
dave_thompson_085
14

Debido a que, por lo general, los servidores web utilizan la tecnología de "servidor virtual" y pueden responder a su solicitud HTTP exactamente dentro del nombre de dominio que solicita, pero no la dirección IP de los servidores web. Gracias a ocultar más de un nombre de dominio en una dirección IP.

Por ejemplo, el servidor web Apache puede responder a su solicitud HTTP con una dirección IP utilizando la sección:

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

o si no se utiliza VirtualHost en la configuración.

La función VirtualHost en Apache se introdujo en 1996.

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

En Apache , puede alojar muchos sitios web utilizando una sola dirección IP. Esto se llama alojamiento virtual. Es cómo se pueden crear subdominios, incluso dominios independientes. Esto se hace configurando un archivo de configuración de Apache que contiene las directivas de VirtualHost para cada dominio / subdominio.

Un servidor HTTP de ejemplo que tiene dos hosts virtuales, example1.com y example2.com puede tener este aspecto (definición de dirección 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>

También puede verse así (definición basada en el nombre):

<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>

En ambos casos, dos registros de host virtual se crean internamente en la memoria y Apache los usa para compararlos cuando llega una solicitud de URI.

Cuando un usuario escribe la dirección IP a través de un agente de usuario, el primer host virtual que figura en el archivo de configuración se utiliza como dominio principal (es decir, en este caso, ejemplo1.com).

Cuando un usuario escribe un nombre de dominio, la solicitud se envía a una red pública de DNS de Internet (ICANN) que proporciona la dirección IP asociada. Usted registró ambos a través de un registrador de ICANN (como GoDaddy). Debe tener ambas cosas correctas y dar algo de tiempo antes de que la propagación se apodere de todos los servidores DNS en la red ICANN. En estos días puede tomar hasta 24 horas.

Cuando la solicitud se enruta a su servidor HTTP Apache, la dirección IP y el nombre de dominio se comparan con la lista de registros internos de VirtualHost. Cuando se encuentra uno, la raíz del documento se utiliza para formar la ruta completa del sistema de archivos al recurso del objeto para volver al agente de usuario. De lo contrario, se envía un HTTP 404 junto con cualquier documento de error asociado.

Kerry Kobashi
fuente
8

Me gusta usar la terminología de "casa".

Puede enviar fácilmente una carta a una casa sin un nombre y llegará a la casa.

Si le pone el nombre de la persona, se lo enviará al destinatario previsto.

El destino es el mismo, pero la forma en que se maneja cuando llega a la casa es diferente.

Cuando especifica el sitio, es decir, www.example.com, el servidor sabe cómo manejar la solicitud y a qué host está destinado y a qué sitio debe servir.

Chris Lomax
fuente
¡Esta es una metáfora útil!
Programas Redwolf
+1 Me gusta la idea del nombre del destinatario. Estaba pensando en una analogía similar, pero con la dirección IP que identifica el edificio físico (computadora) pero el número de departamento (nombre de dominio) que identifica al destinatario real en edificios con varios inquilinos. Por supuesto, esta es una simplificación excesiva y las computadoras con múltiples inquilinos podrían tener el servidor de direcciones solo IP como un sitio predeterminado, pero creo que esta es una buena analogía.
jmbertucci
0

El término clave para buscar es "alojamiento virtual basado en nombres".

Las personas desean asignar varios nombres de host al mismo servidor web y servir contenido diferente para cada nombre de host. Esto se conoce como alojamiento virtual (no debe confundirse con el concepto más reciente de máquinas virtuales).

Inicialmente, el alojamiento virtual se realizó mediante la asignación de múltiples direcciones IP al servidor, el servidor podría enviar contenido diferente en función de la dirección IP utilizada, pero esto se consideró un desperdicio.

Por lo tanto, se introdujo el encabezado "host", inicialmente como una extensión, pero luego se convirtió en parte obligatoria de la especificación http 1.1 en 1997. Este encabezado especifica el nombre de host que solicitó el cliente. El servidor puede servir contenido diferente según el valor del encabezado.

Peter Green
fuente
"pero esto fue visto como un desperdicio". Solo para conexiones v4 heredadas. Ahora es bastante posible configurar cada host virtual en una dirección v6 diferente.
Qwertie
1
Todavía estamos muy lejos del punto en que hacer que sus servicios públicos solo sean IPv6 es algo razonable.
Peter Green
0

Para mantener bajos los costos de los servidores web, muchos servidores web alojan múltiples sitios web. Lo hacen mediante el uso de hosts virtuales, o Vhosts, en apache2 / nginx / etc. Por lo tanto, si va directamente a la dirección IP del sitio web, lo más probable es que obtenga una pantalla "Apache está funcionando", o posiblemente incluso sea redirigido al sitio web principal del servidor web.

Un Vhost mira la dirección del sitio web entrante y la compara con los nombres ServerName o ServerAlias ​​en los archivos Vhosts habilitados. Si uno de ellos coincide, se carga ese sitio web específico.

A menos que el sitio web tenga una carga masiva (un gran número de visitantes únicos / visitas a la página) o impulse aplicaciones de alta carga (piense en youtube.com, facebook, etc.), probablemente sea más rentable operar en un servidor compartido. Sería una pérdida de dinero conseguir un servidor dedicado (a partir de $ 60 / mes) solo para ejecutar un sitio web de blog de Wordpress. Es mejor obtener una plataforma compartida en un servidor con probablemente más de 200 sitios web en un servidor. Los costos serán más en el área de $ 5 / mes.

Otra razón para hacerlo es la falta de direcciones IP. Simplemente no hay suficientes direcciones IPv4 restantes. Es solo a través del uso de NAT para redes domésticas / comerciales y el uso de Vhosts que nos queda algo. Incluso cuando IPv6 se convierta en transmisión principal, los servidores probablemente se adherirán a Vhosts (costos del servidor).

Joseph Williams
fuente
0

Una dirección IP dedicada es costosa, mientras que crear un nuevo sitio web en un servidor es básicamente gratuito.

Lo que sucede es que la empresa de alojamiento alquila una única dirección IP que apunta a un servidor físico, luego aloja miles de sitios web en esa dirección IP utilizando la función de "host virtual"

Piense como un apartado postal, si solo escribe la dirección de la oficina postal pero sin el número del apartado, el correo no será entregado.

Magnetic_dud
fuente
0

Aquí hay muchas respuestas con detalles técnicos, pero creo que la explicación más simple de alto nivel es que incluso si un servidor web está escuchando correctamente el tráfico http en su dirección IP, el servidor generalmente debe también debe estar configurado para responder a un dominio particular nombre, y ese nombre debe estar en la solicitud enviada por el cliente (es decir, el navegador web)

Digo "generalmente" porque casi siempre se hace de esta manera, pero de hecho hay métodos en los que puede configurar el servidor http para responder si solo se usa la dirección IP.

Christopher Hunter
fuente
-1

Necesitamos comprender las diferencias entre las IP virtuales y las IP dedicadas.

Si un sitio web tiene una IP dedicada (no compartida), entonces (por ejemplo) http://123.456.789.012 mostrará el sitio web.

Pruebe esto, que es la dirección IP dedicada de un sitio que tengo, www.negativeiongenerators.com: http://75.126.128.174 Pero, como han dicho otros, generalmente no es una buena idea.

Mike Waters
fuente
1
Esto no es universalmente cierto. Depende de la configuración del servidor web. Puede tener una dirección IP dedicada y aún así no responder a la IP sin el host y también puede tener una dirección IP compartida y hacer que la dirección IP apunte a uno de los sitios web en el servidor. Tampoco hay nada de malo en permitir el acceso a un sitio web solo a través de su dirección IP, aunque tampoco es particularmente útil.
Qwertie