¿Los servidores web solo tienen un sitio web cada uno?
Cuando empiezas a aprender cómo los nombres de dominio, las direcciones IP, los servidores web y los sitios web encajan y funcionan juntos, a veces puede ser un poco confuso o abrumador. ¿Cómo está todo configurado para funcionar tan bien? La publicación de preguntas y respuestas de SuperUser 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
Superusuario lector user3407319 desea saber si los servidores web solo tienen un sitio web cada uno:
Según lo que entiendo sobre el DNS y la vinculación de un nombre de dominio con la dirección IP del servidor web en el que se almacena un sitio web, ¿eso significa que cada servidor web solo puede tener 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
Bob, el contribuidor del superusuario, 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 puede responder en consecuencia.
Solicitudes HTTP
Aquí es cómo sucede su solicitud HTTP típica:
1. El usuario proporciona una URL, en la forma 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 realizarse a través de DNS, pero no tiene que hacerlo (por ejemplo, el archivo de hosts locales en los 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í:
El encabezado del host es estándar y se requiere 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 varios datos que puede utilizar para decidir cuál debe 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 rara vez se usa, y algunas veces para bloquear / filtrar)
- El puerto solicitado, desde el socket TCP.
- El nombre de host solicitado, según lo especificado en el encabezado de host por el navegador en la solicitud HTTP
- El camino solicitado
- Cualquier otro encabezado (cookies, etc.)
Como parece haber notado, la configuración de alojamiento compartido más común en estos días coloca a varios sitios web en una única dirección IP: combinación de puertos, lo que permite que el host distinga entre los 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 el 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 de eso 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 posee 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 hacerlo antes de que se reciba la solicitud HTTP??
Tradicionalmente, esto se resolvía al tener una dirección IP dedicada (o puerto) para cada sitio web que requería HTTPS. Obviamente, esto se ha vuelto problemático ya que nos estamos quedando sin direcciones IPv4.
Ingrese SNI (Indicación del nombre del servidor). El navegador ahora pasa el nombre del host durante las negociaciones TLS, por lo que el servidor web tiene esta información con la suficiente antelación para enviar el certificado correcto. En el lado del servidor web, la configuración es muy similar a la forma en que se configuran los hosts virtuales HTTP.
La desventaja es que el nombre del host ahora se pasa como texto sin formato antes del cifrado y es esencialmente información filtrada. Esto generalmente se considera un compromiso aceptable aunque, de todos modos, considerando que el nombre del host normalmente está expuesto en una consulta de DNS.
¿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, se especifica un sitio web "predeterminado", "catch-all" o "replegado" 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 (a menudo muestra un mensaje de error), o podría ser cualquiera de los otros sitios web en el servidor web, según las preferencias del administrador del servidor web..
¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.