¿Los servidores web solo tienen un sitio web cada uno?

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

Cuando comienza a aprender cómo los nombres de dominio, las direcciones IP, los servidores web y los sitios web encajan y funcionan juntos, puede ser un poco confuso o abrumador a veces. ¿Cómo está todo configurado para que funcione tan bien? La publicación de preguntas y respuestas del superusuario de hoy tiene las respuestas a las preguntas de un lector curioso.

La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad.

Foto cortesía de Rosmarie Voegtli (Flickr) .

La pregunta

Lector de superusuario user3407319 quiere saber si los servidores web solo tienen un sitio web cada uno:

Según lo que entiendo sobre DNS y vincular un nombre de dominio con la dirección IP del servidor web en el que se almacena un sitio web, ¿significa eso que cada servidor web solo puede contener un sitio web? Si los servidores web tienen más de un sitio web, ¿cómo se resuelve todo para que pueda acceder al sitio web que quiero sin ningún problema o confusión?

¿Los servidores web solo tienen un sitio web cada uno o tienen más?

La respuesta

El colaborador de superusuario Bob tiene la respuesta para nosotros:

Básicamente, el navegador incluye el nombre de dominio en la solicitud HTTP para que el servidor web sepa qué dominio se solicitó y pueda responder en consecuencia.

Solicitudes HTTP

Así es como ocurre su solicitud HTTP típica:

1. El usuario proporciona una URL con el formato http: // host: puerto / ruta.

2. El navegador extrae la parte del host (dominio) de la URL y la traduce a una dirección IP (si es necesario) en un proceso conocido como resolución de nombres. Esta traducción puede ocurrir a través de DNS, pero no es necesario (por ejemplo, el archivo de hosts locales en sistemas operativos comunes omite el DNS).

3. El navegador abre una conexión TCP al puerto especificado, o por defecto al puerto 80 en esa dirección IP.

4. El navegador envía una solicitud HTTP. Para HTTP / 1.1, se ve así:

hacer-servidores-web-solo-mantener-un-sitio-web-cada-01

El encabezado de host es estándar y obligatorio en HTTP / 1.1. No se especificó en la especificación HTTP / 1.0, pero algunos servidores lo admiten de todos modos.

Desde aquí, el servidor web tiene varias piezas de información que puede usar para decidir cuál debería ser la respuesta. Tenga en cuenta que es posible que un solo servidor web esté vinculado a varias direcciones IP.

  • La dirección IP solicitada, desde el socket TCP (la dirección IP del cliente también está disponible, pero esta se usa raramente, y a veces para bloquear / filtrar)
  • El puerto solicitado, desde el socket TCP
  • El nombre de host solicitado, como se especifica en el encabezado del host por el navegador en la solicitud HTTP
  • La ruta solicitada
  • Cualquier otro encabezado (cookies, etc.)

Como parece haber notado, la configuración de alojamiento compartido más común en estos días coloca varios sitios web en una sola combinación de dirección IP: puerto, dejando solo el host para diferenciar entre sitios web.

Esto se conoce como un host virtual basado en nombre en Apache-land, mientras que Nginx los llama nombres de servidor en bloques de servidor , e IIS prefiere servidor virtual .

¿Qué pasa con HTTPS?

HTTPS es un poco diferente. Todo es idéntico hasta el establecimiento de la conexión TCP, pero después se debe establecer un túnel TLS cifrado. El objetivo es no filtrar ninguna información sobre la solicitud.

Para verificar que el servidor web sea el propietario de este dominio, el servidor web debe enviar un certificado firmado por un tercero de confianza. El navegador comparará este certificado con el dominio que solicitó.

Esto presenta un problema. ¿Cómo sabe el servidor web qué certificado de host / sitio web enviar si necesita hacer esto antes de recibir la solicitud HTTP?

Tradicionalmente, esto se resolvía al tener una dirección IP (o puerto) dedicada para cada sitio web que requiriera HTTPS. Obviamente, esto se ha vuelto problemático ya que nos estamos quedando sin direcciones IPv4.

Introduzca SNI (indicación del nombre del servidor). El navegador ahora pasa el nombre de host durante las negociaciones de TLS, por lo que el servidor web tiene esta información con suficiente antelación para enviar el certificado correcto. En el lado del servidor web, la configuración es muy similar a cómo se configuran los hosts virtuales HTTP.

La desventaja es que el nombre de host ahora se pasa como texto sin formato antes del cifrado y es esencialmente información filtrada. Esto generalmente se considera una compensación aceptable, aunque considerando que el nombre de host normalmente se expone en una consulta de DNS de todos modos.

¿Qué sucede si solicita un sitio web solo por dirección IP?

Lo que hace el servidor web cuando no sabe qué host específico solicitó depende de la implementación y configuración del servidor web. Normalmente, hay un sitio web «predeterminado», «general» o «alternativo» especificado que proporcionará respuestas a todas las solicitudes que no especifiquen explícitamente un host.

Este sitio web predeterminado puede ser su propio sitio web independiente (que a menudo muestra un mensaje de error), o puede ser cualquiera de los otros sitios web en el servidor web, según las preferencias del administrador del servidor web.


¿Tiene algo que agregar a la explicación? Habla en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Consulte el hilo de discusión completo aquí .