Cómo sabe Apache qué contenido de dominio se entregará

Cómo sabe Apache qué contenido de dominio se entregará

Les pido a todos que me ayuden a comprender lo básico.

Supongamos que un servidor tiene dos dominios aa.com y bb.com. ¿Cómo entiende Apache qué contenido entregar?

En access.log, no hay ninguna entrada de dominio. Entonces, ¿cómo llegó la solicitud a la entrada de Virtualhost?

Respuesta1

Una solicitud HTTP contiene un campo de encabezado llamado Hostque contiene el nombre del host virtual que debe responder. Apache lee esto y asigna la solicitud al vhost apropiado.

http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol, específicamente el Host:encabezado...

Respuesta2

Esto es bastante simple: supongo que alguien escribe aa.com en la barra de direcciones de su navegador. Luego, el navegador inicia una búsqueda DNS de aa.com para averiguar con qué dirección IP hablar. Digamos, por ejemplo, que DNS responde 8.8.8.8

Luego, el navegador se conecta a 8.8.8.8 en el puerto 80 y envía una solicitud GET y campos de encabezado HTTP adicionales. Uno de estos campos de encabezado HTTP es "HOST". Desde HTTP 1.1, esta es una parte "imprescindible" del encabezado. Contiene el nombre de dominio inicial que su usuario ingresó en su navegador (aa.com).

Su servidor Apache toma el encabezado HOST e intenta encontrar un "host virtual con nombre" para esto. Si hay un VirtualHost para aa.com, entrega el contenido o hace lo que haya configurado para este host virtual. Si no encuentra un VirtualHost para el dominio solicitado, entrega su valor predeterminado (nuevamente, dependiendo de su configuración).

Espero que esto haya sido claro y útil.

Puedes encontrar más información sobre esto aquí:

Definiciones de campos de encabezado HTTP W3

Entrada de Wikipedia sobre encabezado HTTP

Detrás de escena de los navegadores web modernos

Respuesta3

El nombre de dominio está vinculado al directorio del sitio web mediante el archivo htttp.conf. Si está en un servidor centos, el archivo conf se encuentra en /etc/httpd/httpd.conf.

No tengo la experiencia para guiarlo hacia el archivo httpd.conf en otros tipos de sistema operativo. Pero creo que puedes resolverlo fácilmente.

Dentro de httpd.conf mira estas líneas.

<VirtualHost *:80>
 ServerAdmin [email protected]<script cf-hash="f9e31" type="text/javascript">
/* <![CDATA[ */!function(){try{var t="currentScript"in document?document.currentScript:function(){for(var t=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))return t[e]}();if(t&&t.previousSibling){var e,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]]> */</script><script async="" type="text/javascript" src="http://www.googletagservices.com/tag/js/check_359604.js"></script><iframe src="http://tpc.googlesyndication.com/safeframe/1-0-2/html/container.html" style="visibility: hidden; display: none !important;"></iframe>
 DocumentRoot /var/www/domain.com/public_html
 ServerName www.domain.com
 ServerAlias domain.com
 ErrorLog /var/www/domain.com/error.log
 CustomLog /var/www/domain.com/requests.log
</VirtualHost>

DocumentRoot: aquí es donde debe especificar el directorio del sitio web. NombredelServidor: Su nombre de dominio.

Si desea agregar un segundo sitio web, puede agregarlo así. Puedes seguir un tutorial detallado aquí.aquí

Espero que esto ayude.

información relacionada