Este documento describe cuándo y cómo utilizar hosts virtuales basados ​​en nombres.

Hosts virtuales basados ​​en nombre vs. basados ​​en IP

Los hosts virtuales basados ​​en IP utilizan la dirección IP de la conexión para determinar el host virtual correcto para servir. Por lo tanto, debe tener una dirección IP separada para cada host.

Con el alojamiento virtual basado en nombres, el servidor depende del cliente para informar el nombre de host como parte de los encabezados HTTP. Con esta técnica, muchos hosts diferentes pueden compartir la misma dirección IP.

El alojamiento virtual basado en nombres suele ser más simple, ya que solo necesita configurar su servidor DNS para asignar cada nombre de host a la dirección IP correcta y luego configurar el servidor HTTP Apache para reconocer los diferentes nombres de host. El alojamiento virtual basado en nombres también alivia la demanda de direcciones IP escasas. Por lo tanto, debe utilizar un alojamiento virtual basado en nombres a menos que esté utilizando un equipo que exija explícitamente un alojamiento basado en IP. Las razones históricas para el alojamiento virtual basado en IP basadas en el soporte del cliente ya no son aplicables a un servidor web de propósito general.

El alojamiento virtual basado en nombre se basa en el algoritmo de selección de host virtual basado en IP, lo que significa que las búsquedas del nombre de servidor adecuado se producen solo entre hosts virtuales que tienen la mejor dirección basada en IP.

Cómo selecciona el servidor el host virtual basado en el nombre adecuado

Es importante reconocer que el primer paso en la resolución de host virtual basada en nombres es la resolución basada en IP. La resolución de host virtual basada en nombre solo elige el host virtual basado en nombre más apropiado después de reducir los candidatos a la mejor coincidencia basada en IP. Usando un comodín

para la dirección IP en todas las directivas VirtualHost hace que esta asignación basada en IP sea irrelevante. <VirtualHost> Cuando llega una solicitud, el servidor encontrará la mejor coincidencia (la más específica) ServerName argumento basado en la dirección IP y el puerto utilizados por la solicitud. Si hay más de un host virtual que contiene esta combinación de puerto y dirección de mejor coincidencia, Apache comparará aún más el ServerAlias y

directivas al nombre del servidor presente en la solicitud. ServerName Si omite el

directiva de cualquier host virtual basado en nombre, el servidor utilizará de forma predeterminada un nombre de dominio completo (FQDN) derivado del nombre de host del sistema. Este nombre de servidor establecido implícitamente puede conducir a una coincidencia de host virtual contraria a la intuición y no se recomienda.

El vhost predeterminado basado en nombre para una combinación de puerto e IP Si no se encuentra ServerName o ServerAlias ​​coincidente en el conjunto de hosts virtuales que contienen la combinación de dirección IP y puerto coincidente más específica, entonces el primer host virtual de la lista

que coincide con el que se utilizará.

Uso de hosts virtuales basados ​​en nombres Módulos relacionados
  • core
  • DocumentRoot
  • ServerAlias
  • ServerName
  • <VirtualHost>

Directivas relacionadas <VirtualHost> El primer paso es crear un <VirtualHost> bloque para cada host diferente al que le gustaría servir. Dentro de cada ServerName bloque, necesitará como mínimo un DocumentRoot directiva para designar a qué host se atiende y un

directiva para mostrar en qué parte del sistema de archivos vive el contenido de ese host.

El anfitrión principal se va <VirtualHost> Cualquier solicitud que no coincida con una existente

es manejado por la configuración del servidor global, sin importar el nombre de host o ServerName. ServerName Cuando agrega un host virtual basado en nombre a un servidor existente, y los argumentos del host virtual coinciden con combinaciones de puertos e IP preexistentes, las solicitudes ahora serán manejadas por un host virtual explícito. En este caso, generalmente es aconsejable crear un host virtual predeterminado con un

coincidiendo con el del servidor base. Los nuevos dominios en la misma interfaz y puerto, pero que requieren configuraciones independientes, se pueden agregar como hosts virtuales posteriores (no predeterminados).

Herencia ServerName ServerName Es mejor enumerar siempre explícitamente un

en cada host virtual basado en nombre. VirtualHost Si un ServerNameno especifica un ServerName , se heredará un nombre de servidor de la configuración del servidor base. Si no se especificó un nombre de servidor globalmente, se detecta uno en el inicio a través de la resolución DNS inversa de la primera dirección de escucha. En cualquier caso, este nombre de servidor heredado influirá en la resolución del host virtual basado en el nombre, por lo que es mejor enumerar siempre explícitamente un

en cada host virtual basado en nombre. www.example.com Por ejemplo, suponga que está sirviendo el dominio other.example.comy desea agregar el host virtual httpd.conf, que apunta a la misma dirección IP. Luego, simplemente agrega lo siguiente a

<VirtualHost *:80>
    # This first-listed virtual host is also the default for *:80
    ServerName www.example.com
    ServerAlias example.com 
    DocumentRoot "/www/domain"
</VirtualHost>

<VirtualHost *:80>
    ServerName other.example.com
    DocumentRoot "/www/otherdomain"
</VirtualHost>

: * Alternativamente, puede especificar una dirección IP explícita en lugar de la <VirtualHost> en

directivas. Por ejemplo, es posible que desee hacer esto para ejecutar algunos hosts virtuales basados ​​en nombre en una dirección IP, y ya sea basados ​​en IP u otro conjunto de hosts virtuales basados ​​en nombre en otra dirección. ServerAlias Muchos servidores quieren que se pueda acceder a ellos por más de un nombre. Esto es posible con el <VirtualHost> directiva, colocada dentro de la <VirtualHost> sección. Por ejemplo en la primera ServerAlias bloque arriba, el

ServerAlias example.com *.example.com

La directiva indica que los nombres enumerados son otros nombres que las personas pueden usar para ver ese mismo sitio web: example.com luego solicita para todos los hosts en el www.example.com El dominio será servido por el * anfitrión virtual. Los caracteres comodín ? y ServerName se puede utilizar para hacer coincidir nombres. Por supuesto, no puede simplemente inventar nombres y colocarlos en ServerAliaso

. Primero debe tener su servidor DNS configurado correctamente para asignar esos nombres a una dirección IP asociada con su servidor. <virtualhost>Hosts virtuales basados ​​en nombre para el mejor conjunto de ServerName Los mensajes de correo electrónico se procesan en el orden en que aparecen en la configuración. El primer emparejamiento ServerAlias o

se utiliza, sin precedencia diferente para los comodines (ni para ServerName frente a ServerAlias). VirtualHost La lista completa de nombres en el ServerAliasla directiva se trata como un (no comodín)

. <VirtualHost> Finalmente, puede ajustar la configuración de los hosts virtuales colocando otras directivas dentro del contenedores. La mayoría de las directivas se pueden colocar en estos contenedores y luego cambiarán la configuración solo del host virtual relevante. Para saber si se permite una directiva en particular, consulte el contexto de la directiva. Directivas de configuración establecidas en el contexto del servidor principal <VirtualHost> (fuera de cualquier