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 |
---|---|
|
|
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 ServerName
no 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.com
y 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 ServerAlias
o
. 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 ServerAlias
la 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
container) se usarán solo si no son anulados por la configuración del host virtual.