¿Los servidores contienen solo un sitio web?

¿Los servidores contienen solo un sitio web?

Según tengo entendido, el enlace DNS del nombre de dominio con la dirección IP del servidor en el que está almacenado el sitio web, ¿eso significa que cada servidor solo puede contener un sitio web? Si no es así, ¿cómo puedo saber al llamar a la dirección IP del servidor qué sitio web quiero si hay muchos en el mismo servidor?

Respuesta1

Básicamente: el navegador incluye el nombre de dominio en la solicitud HTTP, por lo que el servidor web sabe qué dominio se solicitó y puede responder en consecuencia.


Solicitudes HTTP

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

  1. El usuario proporciona una URL, en el formato http://host:port/path.

  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 comoresolución de nombre. Esta traducción puede realizarse a través de DNS, pero no es necesario (por ejemplo, el hostsarchivo local en los sistemas operativos comunes omite el DNS).

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

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

    GET /path HTTP/1.1
    Host: example.com
    

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

A partir de 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 único 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 utiliza, a veces para bloquear/filtrar.
  • El puerto solicitado, desde el socket TCP
  • El nombre de host solicitado, tal como lo especifica Hostel navegador en el encabezado de 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 varios sitios web en una única combinación de dirección IP: puerto, dejando solo Hostdiferenciar entre sitios web.

Esto se conoce como unHost virtual basado en nombreen tierra Apache, mientras que Nginx los llamaNombres de servidores en bloques de servidoresy IIS prefiereServidor 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 realmente posee este dominio, el servidor debe enviar un certificado firmado por un tercero de confianza. Luego, el navegador comparará este certificado con el dominio que solicitó.

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

Tradicionalmente, esto se resolvía teniendo una dirección IP (o puerto) dedicado para cada sitio web que requería HTTPS. Obviamente, esto se vuelve problemático cuando empezamos a quedarnos sin direcciones IPv4.

IngresarSNI(Indicación del nombre del servidor). El navegador ahora pasa el nombre de host durante las negociaciones TLS, por lo que el servidor tiene esta información con suficiente antelación para enviar el certificado correcto. Del lado del servidor, 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, considerando que el nombre de host normalmente está expuesto en una consulta DNS de todos modos.


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

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

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

Respuesta2

Tengo esta explicación para personas sin conocimientos de tecnología.

Jack, Jill y Joe viven en un dormitorio y no tienen teléfonos móviles.

En la agenda aparecen todos con el mismo número. (Un expediente)

Marcas el número y alguien contesta el teléfono; dices "Me gustaría hablar con Jill" y la pones al teléfono.

En lugar de un registro A (un número de teléfono/dirección IP) en la guía telefónica, es posible que simplemente diga "Dormitorio X", luego debe buscar el número del Dormitorio X. Este es un registro CNAME.

Si Jill no está disponible, es posible que obtengas

  • 404 Jill no está aquí
  • 410 Jill está muerta.
  • 301 Jill se muda con Peter
  • 302 Jill está visitando a Peter, llámalo en su lugar

  • 400 No puedo entenderte.

  • 401 ¿Quién eres? ¿Cual es la contraseña? o No permitimos llamadas masculinas después de las 10 p.m.
  • Pago 402 requerido (¿Estás seguro de que Jill es su nombre real? ;-))
  • 403 No, esa no es la contraseña correcta.
  • 418 Jill es una tetera :-)
  • 429 Jill no puede atender más llamadas.
  • 451 Estás violando tu orden de restricción.

  • 500 Nuestro sistema telefónico se ha averiado.

Respuesta3

Según tengo entendido, el enlace DNS del nombre de dominio con la dirección IP del servidor en el que está almacenado el sitio web, ¿eso significa que cada servidor solo puede contener un sitio web?

Primero, debe comprender que aquí hay varios conceptos distintos.

  • Sitio web, conjunto de páginas web que forman un todo coherente.
  • Dirección IP, una dirección numérica (32 bits para IPv4, 128 bits para IPv6) utilizada por el protocolo de Internet como origen o destino del tráfico.
  • Servidor, una máquina cuyo trabajo es atender las solicitudes de los clientes.
  • Nombre de host, un nombre utilizado para identificar una máquina en DNS (por ejemplo, "www.example.com" o "en.wikipedia.org")

No existe una relación uno a uno entre ninguna de estas cosas. Un servidor puede tener varias direcciones IP; varios nombres de host pueden apuntar a una dirección IP; un nombre de host puede apuntar a varias direcciones IP. Varios sitios web pueden estar bajo el mismo nombre de host. Un sitio web puede distribuirse en varios nombres de host.

Si no es así, ¿cómo puedo saber al llamar a la dirección IP del servidor qué sitio web quiero si hay muchos en el mismo servidor?

En los viejos tiempos (HTTP 1.0 y anteriores), cada nombre de host que el servidor quería manejar de manera diferente tenía que tener su propia dirección IP. Esto fue un desperdicio.

HTTP 1.1 agregó el Host"encabezado" como campo obligatorio en la solicitud HTTP (IIRC, algunos proveedores habían admitido esto anteriormente como una extensión). Esto le indicó al servidor qué nombre de host se había solicitado y, por lo tanto, le permitió servir contenido diferente para diferentes nombres de host en el mismo La compatibilidad con la dirección IP para HTTP 1.1 en los clientes ahora es omnipresente.

Desafortunadamente, SSL (más tarde TLS) añadió un problema. Establecer una sesión SSL/TLS requiere que el servidor presente un certificado al cliente que cubra el nombre de host solicitado, pero la solicitud HTTP no llega hasta que se establece la sesión SSL/TLS.

Es posible que un certificado cubra varios nombres de host mediante el uso del SubjectAltNamecampo o el uso de comodines en el CommonNamecampo. Sin embargo, esto plantea desafíos administrativos, especialmente si los nombres de host involucrados pertenecen a dominios con propietarios diferentes.

Entonces TLS introdujo la extensión "indicación de nombre de servidor" (SNI). Con esta extensión, el cliente envía el nombre de host solicitado al servidor durante el procedimiento de protocolo de enlace TLS. Luego, el servidor puede presentar el certificado apropiado. Desafortunadamente, si bien las versiones actuales de todas las principales implementaciones SSL/TLS son compatibles con SNI, las versiones anteriores han tardado mucho tiempo en dejar de utilizarse.

Respuesta4

Usando DNS puedes asignar tantos nombres a una dirección IP individual como quieras (en tuarchivo de hostspuedes simplemente separar cada nombre con espacios, por ejemplo). Usando un servidor DNS también puedesasignar múltiples direcciones IP a un solo nombre. No se limita a una relación uno a uno.

Un servidor web sabe qué sitio servirexaminandola URL solicitada. Observa qué dominio se solicitó, el puerto que se solicitó y qué protocolo se utilizó. Esto no tiene nada que ver con DNS y lo maneja el protocolo HTTP.

información relacionada