Versión 2.0 del Servidor HTTP Apache

Este documento describe cómo y cuándo debe usarse hosting virtual basado en nombres.
 Diferencias entre el hosting vitual
basado en nombres y el basado en IPs
 Diferencias entre el hosting vitual
basado en nombres y el basado en IPs Cómo usar hosting vitual basado en
nombres
 Cómo usar hosting vitual basado en
nombres Compatibilidad con navegadores
antiguos
 Compatibilidad con navegadores
antiguosEl hosting virtual basado en IPs usa la dirección IP de la conexión para determinar qué host virtual es el que tiene que servir. Por lo tanto, necesitará tener diferentes direcciones IP para cada host. Si usa hosting virtual basado en nombres, el servidor atiende al nombre de host que especifica el cliente en las cabeceras de HTTP. Usando esta técnica, una sola dirección IP puede ser compartida por muchos sitios web diferentes.
El hosting virtual basado en nombres es normalmente más sencillo, porque solo necesita configurar su servidor de DNS para que localice la dirección IP correcta y entonces configurar Apache para que reconozca los diferentes nombres de host. Usando hosting virtual basado en nombres también se reduce la demanda de direcciones IP, que empieza a ser un bien escaso. Por lo tanto, debe usar hosting virtual basado en nombres a no ser que haya alguna razón especial por la cual tenga que elegir usar hosting vitual basado en direcciones IP. Algunas de éstas razones pueden ser:
| Módulos Relacionados | Directivas Relacionadas | 
|---|---|
Para usar hosting virtual basado en nombres, debe especificar
    en el servidor qué dirección IP (y posiblemente qué puerto) se va
    a usar para atender las peticiones a los diferentes hosts.  Esto
    se hace con la directiva NameVirtualHost. Normalmente, cualquiera
    o todas las direcciones IP del servidor pueden usarse, también
    puede usar * como argumento para la directiva
    NameVirtualHost. Si va a usar
    más de un puerto (por ejemplo si va usar SSL) debe añadir un
    puerto a cada argumento, por ejemplo *:80. Tenga en
    cuenta que especificando una dirección IP en la directiva
    NameVirtualHost no hace que
    el servidor escuche automáticamente en esa dirección IP. Consulte
    la sección Especificar las direcciones y
    puertos que usa Apache para obtener más información. Además,
    cualquier dirección IP especificada debe asociarse con un
    dispositivo de red del servidor.
El siguiente paso es crear un bloque <VirtualHost> para cada host diferente que
    quiera alojar en el servidor. El argumento de la directiva
    <VirtualHost>
    debe ser el mismo que el argumento de la directiva NameVirtualHost (por ejemplo, una
    dirección IP, o un * para usar todas las direcciones
    que tenga el servidor).  Dentro de cada bloque <VirtualHost>, necesitará
    como mínimo una directiva ServerName para designar qué host se
    sirve y una directiva DocumentRoot para indicar dónde están
    los contenidos a servir dentro del sistema de ficheros.
Si está añadiendo hosts virtuales a un servidor web ya
        existente, debe crear también un bloque <VirtualHost> para el
        host que ya tenga funcionando. Los valores de las directivas
        ServerName y DocumentRoot desde este nuevo host
        virtual deben tener los mismos valores que los de las
        directivas ServerName
        DocumentRoot
        globales. Ponga este host virtual como el primero en el
        archivo de configuración para que sea el que actúe como host
        por defecto.
Por ejemplo, suponga que está sirviendo el dominio
    www.domain.tld y quiere añadir el host virtual
    www.otherdomain.tld, que apunta a la misma dirección
    IP. Entonces, lo único que tiene que hacer es añadir lo siguiente
    al fichero httpd.conf:
        NameVirtualHost *:80
        
        <VirtualHost *:80>
        
            ServerName www.domain.tld
            ServerAlias domain.tld *.domain.tld
            DocumentRoot /www/domain
        
        </VirtualHost>
        
        <VirtualHost *:80>
        ServerName www.otherdomain.tld
            DocumentRoot /www/otherdomain
        
        </VirtualHost>
    
También puede optar por especificar una dirección IP
    explícitamente en lugar de usar un * en las
    directivas NameVirtualHost y
    <VirtualHost>. Por ejemplo, puede hacer esto
    para hacer funcionar diferentes hosts virtuales basados en nombres
    en una dirección IP, o basados en IPs, o un conjunto de hosts
    virtuales basados en nombres en otra dirección.
También puede que quiera que se acceda a un determinado sitio
    web usando diferentes nombres. Esto es posible con la directiva
    ServerAlias, puesta dentro de
    la sección <VirtualHost>. Por ejemplo, en el primer bloque
    <VirtualHost> de
    arriba, la directiva ServerAlias indica la lista de nombres
    que pueden usarse para acceder a un mismo sitio web:
        ServerAlias domain.tld *.domain.tld
    
entonces las peticiones para todos los hosts en el dominio
    domain.tld serán servidas por el host virtual
    www.domain.tld. Los carácteres comodines
    * y ? pueden usarse para encontrar
    equivalencias con los nombres.  Por supuesto, no puede inventarse
    nombres y ponerlos en la directiva ServerName o
    ServerAlias. Primero debe tener su servidor de DNS
    debidamente configurado para que pueda hacer corresponder esos
    nombres con una dirección IP de su servidor.
Para terminar, puede mejorar el rendimiento de la configuración
    de los hosts virtuales poniendo otras directivas dentro de las
    secciones <VirtualHost>. La mayor parte de las
    directivas pueden ponerse en esos containers y cambiarán solo la
    configuración del host virtual al que se refieran. Para ver si una
    directiva en particualar puede usarse así, consulte el Contexto de la
    directiva. Las directivas de configuración especificadas en el
    contexto del servidor principal (fuera de
    cualquier sección <VirtualHost>) se usan única y
    exclusivamente si sus valores no son sustituidos por alguno de los
    parámetros de configuración del host virtual.
Cuando llega una petición, el servidor primero verifica si se
    está usando una dirección IP que coincide con el valor de la
    directiva NameVirtualHost. Si es el caso, mirará en cada
    sección <VirtualHost> cuya IP coincida e intentará
    encontrar si el valor de la directiva ServerName o de la directiva ServerAlias
    coincide con el nombre del sitio web de la petición. Si encuentra
    una coincidencia, usa la configuración de ese servidor. Si no la
    encuentra, usa el primer host virtual de la lista
    cuya dirección IP coincida con el de la petición.
Como consecuencia, el primer host virtual de la lista es el que
    se usa por defecto.  La directiva DocumentRoot del servidor
    principal no se usará nunca cuando una
    dirección IP coincida con el valor de la directiva NameVirtualHost. Si quiere usar una
    configuración especial para peticiones que no coinciden con ningún
    host virtual en concreto, ponga esa configuración en una sección
    <VirtualHost> y
    póngala la primera en el fichero de configuración.
Como se dijo antes, hay algunos clientes que no envían los datos necesarios para que funcione correctamente el hosting virtual basado en nombres. Estos clientes van a recibir siempre como respuesta a sus peticiones, páginas del primer host virtual que haya en la lista para esa dirección IP (el host virtual primario basado en nombres).
Tenga en cuenta que cuando decimos antiguo, queremos decir
    realmente antiguo. Es muy poco probable que encuentre uno de esos
    navegadores en uso todavía. Todas las versiones actuales de
    cualquier navegador envían la cabecera Host que se
    necesita para que el hosting virtual basado en nombres
    funcione.
Existe una manera de evitar este problema con la directiva
    ServerPath, aunque es un poco
    complicada:
Ejemplo de configuración:
        NameVirtualHost 111.22.33.44
        
        <VirtualHost 111.22.33.44>
        
            ServerName www.domain.tld
            ServerPath /domain
            DocumentRoot /web/domain
        
        </VirtualHost>
    
¿Qué significa esto? Esto significa que una petición de
    cualquier URI que empiece por "/domain" será servida
    por el host virtual www.domain.tld. Esto significa
    que las páginas pueden accederse como
    http://www.domain.tld/domain/ por todos los clientes,
    aunque los clientes que envíen una cabecera Host:
    pueden también acceder con
    http://www.domain.tld/.
Para hacer que esto funcione, ponga un enlace en la página de
    su host virtual primario a
    http://www.domain.tld/domain/. Entonces, en las
    páginas del host virtual, asegúrese de que usa o enlaces relativos
    (por ejemplo, "file.html" o
    "../icons/image.gif") o enlaces que contengan el
    /domain/ anterior (por ejemplo,
    "http://www.domain.tld/domain/misc/file.html" o
    "/domain/misc/file.html").
Esto requiere un poco de disciplina, pero siguiendo estas reglas, puede asegurarse, casi en todos los casos, de que las páginas de su sitio web podrán ser accedidas desde cualquier navegador, ya sea nuevo o antiguo.