¿Cómo tiene una dirección IP y muchos sitios web?

27

¿Cómo puedo tenerlo donde tengo una dirección IP que se encuentra en Internet pero muchos nombres web? Por ejemplo, cuando una empresa de alojamiento tiene una IP compartida pero obtengo nombres de dominio ilimitados (junto con todos los demás en ese cuadro).

Tengo un cuadro en Internet pero quiero señalar a otra máquina que tiene un sitio web diferente cuando alguien escribe en el www diferente ... (está sentado justo al lado en un cuadro diferente). ¿Eso es todo subdomaining? Gracias.

Soy la empresa de hosting

johnny
fuente

Respuestas:

36

Es parte del protocolo HTTP 1.1.

Específicamente, el protocolo HTTP 1.1 incluye un encabezado llamado "host:" que especifica a qué sitio web en un servidor en particular está intentando acceder el cliente.

Entonces, si snoopy.net y woodstock.org ambos comparten 192.0.32.10 y su navegador está tratando de obtener contenido de http://snoopy.net/doghouse la solicitud http específica se vería así:

GET /doghouse HTTP/1.1
Host: snoopy.net

Si la URL deseada es http://woodstock.org/seedsla solicitud se vería así

GET /seeds HTTP/1.1
Host: woodstock.org

En ambos casos, habría un socket tcp entre su computadora y el puerto 80 del servidor. El servidor sabría obtener contenido de /var/www/snoopy.net o /var/www/woodstock.org/ basado en el encabezado Host.

Habría otros encabezados para las cookies y otras cosas como el tipo de navegador y el contenido permitido, pero el encabezado "Host" es específicamente lo que permite al servidor web saber qué sitio web virtual se desea.

Hay más en el RFC2616 .

Esta es también la razón por la cual los sitios https * deben *** tener su propia dirección IP: el intercambio de claves SSL y la verificación del certificado tienen lugar antes de la transacción http, por lo que el servidor http no sabrá entregar el certificado de "Woodstock". org "o" snoopy.net "cuando recibe una conexión https en el puerto 443 de 192.0.32.10.


editar

** en los comentarios, Grawity señala que hay extensiones de SSL en la especificación TLS que permiten al servidor saber a qué sitio web está intentando acceder el usuario, y que la mayoría de los navegadores web modernos tienen estas extensiones, por lo que debe ser un poco demasiado fuerte.

Chris
fuente
para que el servidor web vea ese encabezado y lo mueva al sitio web correcto? ¿Puedes tener múltiples sitios web en el mismo puerto así?
johnny
1
Para eso es exactamente. Un "servidor" como apache, tiene el puerto 80 de 192.0.32.10 que tiene muchas entradas DNS, cada una de las cuales es un "sitio". El servidor sabe cuál es el sitio deseado en función del encabezado "host".
Chris
3
El DNS está configurado para hacer que ambos nombres apunten a la misma dirección IP, donde el servidor está escuchando. El servidor recibe conexiones en la misma IP y puerto, pero luego, cuando el navegador le dice "Quiero SiteA.com", sabe que necesita entregar un contenido diferente al que se le solicita para SiteB.com.
Massimo
2
Para ser aún más claro: los dos sitios se distinguen a nivel de protocolo HTTP, no a nivel de TCP / IP. Es como cuando alguien llama a su oficina y le pide hablar con John o Susan: el número de teléfono es el mismo, pero más de una persona puede usarlo.
Massimo
1
La mayoría de los navegadores web y servidores ahora admiten la indicación de nombre de servidor TLS, lo que elimina el requisito de una dirección IP por sitio web.
Grawity
12

Hay algo que todos los navegadores modernos envían junto con la solicitud, llamado "Host:" Encabezado.

La solicitud real que Firefox envía para esta página es:

Anfitrión: superuser.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Aceptar: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Aceptar-Lenguaje: en-us, en; q = 0.5
Aceptar-codificación: gzip, desinflar
Aceptar-juego de caracteres: ISO-8859-1, utf-8; q = 0.7, *; q = 0.7
Keep-Alive: 300
Conexión: mantener vivo

Como puede ver, el

Anfitrión: superuser.com
bit identifica el sitio web en cuestión.

En IIS y Apache, puede configurar sitios web virtuales que solo aceptan solicitudes de una combinación específica de IP / host.

En cuanto a su problema particular, tendrá que leer cómo su empresa de alojamiento particular quiere que solicite la configuración.

John Gietzen
fuente
Esto también debería mencionar que necesita configurar múltiples entradas DNS para su dirección IP.
Tadeusz A. Kadłubowski
@Tadeusz: es posible configurar entradas DNS comodín, por lo que esto no es estrictamente necesario.
John Gietzen
6

La técnica para alojar más de un dominio / subdominio en una sola dirección IP / host se llama hosts virtuales . La solicitud http get contiene el nombre de dominio para el que las solicitudes permiten que el servidor web haga coincidir la solicitud con un dominio virtual particular.

Si tiene varios hosts físicos internamente con solo una IP externa, entonces querrá considerar la configuración de proxy inverso para reenviar las solicitudes a la máquina / dirección IP interna correcta.

3dinfluence
fuente
o podría, por supuesto, otros servidores http en diferentes puertos también.
Chopper3
Sí, eso también es una opción. Pero las personas no están acostumbradas a tener que especificar un puerto cuando escriben una URL, por lo que reservaría esa solución para algunas situaciones, como una interfaz de administración.
3dinfluence
3

La característica en su servidor web normalmente se llama 'hosts virtuales'. Una vez que apunte las entradas dns para que apunten a esa dirección IP (como se menciona en las otras respuestas), el servidor servirá los diferentes sitios dependiendo de cuál sea el host solicitado.

En cuanto a apuntar a otra caja va. Puede configurar redireccionamientos en la mayoría de los servidores web si espera obtener primero la consulta. Si está hablando de subdominios, todo lo que debe hacer es apuntar cada uno de los subdominios a una dirección IP diferente.

es decir, host.com -> IP 1 y luego www.host.com -> IP 2 y mail.host.com -> IP 3

Si desea respuestas más específicas, debe decir qué software de servidor web y qué sistema operativo está ejecutando.

Es posible que ServeFault sea un mejor lugar para esta pregunta.

Colin Newell
fuente
1

En breve...

Uno: establezca las entradas DNS para sus diversos dominios para que todos apunten a su casilla.

Dos: según lo descrito por otros, configure su servidor web (no diga cuál) para que coincida con el nombre de host solicitado.

De esa manera, todas las solicitudes de todos sus dominios van a la misma máquina y su configuración toma el dominio solicitado y lo dirige a la carpeta correcta que contiene el contenido de ese sitio.

Garry
fuente
0

Su pregunta me parece que tiene un servidor físico separado para el segundo sitio web. En ese caso, no podrá utilizar una sola dirección IP para los dos servidores. Puede a) obtener una segunda dirección IP pública para su segundo host ob) configurar un proxy inteligente que reenvíe solicitudes a diferentes servidores en su red interna en función de los encabezados del host. Estoy bastante seguro de que b) es posible, pero no tengo una idea real de cómo funciona, por lo que tendrá que preguntarle a alguien más si eso es lo que está tratando de hacer.

Catherine MacInnes
fuente
0

Si estoy leyendo su pregunta correctamente, ¿tiene dos computadoras diferentes que comparten una dirección IP a través de NAT (Network Address Translation)? Si es así, tendrá que hacer que un sitio escuche en un puerto diferente (no 80); no sé de qué manera sé que el enrutador envíe solicitudes a diferentes computadoras en función de los metadatos HTTP "Host". Es mejor que obtenga una segunda dirección IP para su segundo servidor.

CarlF
fuente