Dentro de una misma máquina, en la que se encuentre instalado el servidor web Apache, es posible configurar diferentes direcciones de acceso como si se tuvieran diferentes servidores físicos. Por ejemplo, podremos tener las direcciones http://www.servidor1.com y http://www.servidor2.com accediendo a la misma máquina (que puede ser equivalente a una misma dirección IP) pero que accedan a diferentes contenidos del servidor web.

Para ello debemos usar las directivas NameVirtualHost<VirtualHost>.

Directiva NameVirtualHost

Esta directiva es obligatoria para establecer servidores virtuales. Con ella, puedes especificar las direcciones IP desde las que el servidor web puede recibir peticiones para los nombres de servidores virtuales. Normalmente debe ser la dirección IP del servidor web. Si se tienen varias direcciones IP en el mismo equipo, y quieres atender las peticiones desde todas ellas, debes añadir a esta directiva para cada una de ellas separadas por espacios.

Opcionalmente se puede indicar el puerto por el que se van a atender las peticiones. Si se va a especificar el puerto se debe indicar a continuación de la dirección IP separados por el carácter ':'.

Si no quieres especificar una IP concreta del servidor web, puedes usar el carácter '*' para indicar que al servidor web pueda aceptar peticiones desde cualquier IP del equipo.

Por ejemplo:

Para atender las peticiones que el servidor web reciba a través del interfaz de red que tiene la IP 111.22.33.33:

NameVirtualHost 111.22.33.44

Si se quiere que sólo se atiendan las peticiones a través de esa IP y sólo del puerto 80:

NameVirtualHost 111.22.33.44:80

Y si nos da igual la IP a través de la cual se reciban las peticiones:

NameVirtualHost *:80

Directiva <VirtualHost>

Define los servidores virtuales que se van a utilizar en el servidor web. Se utiliza indicando dentro de la etiqueta las direcciones IP desde las que va a atender las peticiones, junto con el puerto de escucha de la misma manera que se ha establecido en la directiva NameVirtualHost anterior.

Entra las directivas <VirtualHost></VirtualHost> se especificará el nombre de dominio del servidor virtual, usando la directiva ServerName, y la carpeta en la que se encontrarán las páginas web para ese servidor virtual, usando la directiva DocumentRoot. Además se incluirán todas las directivas necesarias para establecer la configuración deseada para el servidor virtual como si se tratara de un servidor real. Por ejemplo, deberán indicar los permisos de acceso a la carpeta indicada usando la directiva <Directory>.

Por ejemplo, supongamos que disponemos de los siguientes nombres de dominio: aula1.miservidor.com y aula2.miservidor.com. Deseamos que las páginas web correspondientes al dominio del aula1 se tomen de la carpeta /home/usuario/webs/aula1, y las de aula2 estarán en /home/usuario/webs/aula2. Se quieren atender las peticiones que lleguen al servidor desde cualquier interfaz de red, por el puerto 80. La configuración que se debe establecer es la siguiente:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName aula1.miservidor.com
DocumentRoot "/home/usuario/webs/aula1"
<Directory "/home/usuario/webs/aula1">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName aula2.miservidor.com
DocumentRoot "/home/usuario/webs/aula2"
<Directory "/home/usuario/webs/aula2">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Configuración de servidores virtuales en Ubuntu

En Ubuntu la configuración de los servidores virtuales debería hacerse en archivos independientes dentro de la carpeta /etc/apache2/sites-enabled. Si observas el contenido de esa carpeta, en ella se encuentra 000-default en el que se encuentra la configuración de la carpeta principal del servidor web.

En el archivo de configuración /etc/apache2/apache2.conf incluye en su parte final todos los archivos que se encuentren en la carpeta sites-enabled. En las últimas versiones de Apache Web Server, estos archivos de configuración deben tener la extensión .conf.

virtualhost02

Aunque no es obligatorio, se debería crear un archivo en esa carpeta para cada servidor virtual con el contenido de su configuración, siguiendo la misma estructura que el existente (3 dígitos y un nombre).

Para el ejemplo anterior, se deberían crear dos archivos 001-aula1 y 002-aula2 conteniendo la configuración de cada uno.

virtualhost03

Además, no es necesario indicar la directiva NameVirtualHost *:80, puesto que se encuentra ya declarada en el archivo ports.conf.

virtualhost01

Nombres de dominio sin servidor DNS

Si no dispones de un servidor DNS que te proporcione la traducción de los nombres de dominio que deseas a la dirección IP de tu servidor web puede usar el archivo hosts para indicar las equivalencias que quieras entre dominios e IPs.

Este archivo debes configurarlo en cada equipo que vaya a acceder al servidor web. Dependiendo del sistema operativo, el archivo se encuentra en una determinada carpeta:

  • Windows XP y 7: C:\Windows\System32\drivers\etc\hosts
  • Ubuntu: /etc/hosts
  • Mac OS: /private/etc/hosts

En cualquier caso se trata de un archivo de texto en el que debes indicar la relación entre direcciones IP con nombres de dominio.

Por ejemplo, para el caso del ejemplo visto anteriormente, si el servidor web se encuentra en la dirección IP 192.168.5.1, debemos añadir al archivo hosts las siguientes líneas en cada equipo que queremos utilizar para acceder a las páginas web:

192.168.5.1    aula1.miservidor.com

192.168.5.1    aula2.miservidor.com

Observa que se asigna la misma dirección IP a varios dominios. Los servidores virtuales que se han configurado anteriormente reconocerás a qué carpeta debes acudir para cargar la página web correspondiente.