Cómo configurar hosts virtuales de Apache en Ubuntu

Apache software foundation

En este artículo nos gustaría mostraros cómo crear hosts virtuales con Apache en una máquina con Ubuntu. En él os presentaremos los pasos a seguir para servir contenido diferente a los usuarios, según el dominio indicado.

El servidor Apache es el más utilizado en todo el mundo a la hora de servir contenido web en Internet. Se estima que lo utilizan más de la mitad de los servidores de todo el mundo. Esto se debe a su potencia y flexibilidad, que hah hecho que se sobreponga a las amenazas de otros servidores similares. Apache tiene la característica de poder dividirse en unidades individuales que se pueden configurar de forma independiente. De este modo se crea una especie de máquina virtual para cada uno de los dominios a los que da servicio.

Esta estructura permite que cada dominio sea dirigido a un directorio específico que contiene toda su información, sin que entre en conflicto con el resto de sitios alojados ahí. El número de dominios que se pueden crear son ilimitados, siempre y cuando la máquina pueda soportar toda la carga.

Prerrequisitos en tu máquina virtual

Antes de seguir, debes asegurarte de que dispones de un usuario con privilegios root y de que tienes instalado Apache en tu máquina. Si no lo tienes instalado, puedes hacerlo a través de «apt-get», como os mostramos a continuación.

sudo apt-get update
sudo apt-get install apache2

Una vez cumplas con estos requisitios, ya puedes seguir la guía. Como ejemplo configuraremos un servidor virtual para example.com y otro para test.com.

Paso 1 – Crear la estructura de directorios

Lo primero que tenemos que hacer es crear la estructura de directorios que contendrá la información que se mostrará a quien entre en nuestro sitio. Para ello, en el directorio de nivel superior de Apache «/var/www», crearemos un directorio por cada uno de los dominios que queremos dar de alta. Dentro de cada uno de estos directorios vamos a crear una carpeta «public_html» que será donde guardaremos nuestros archivos reales. En el caso de nuestros ejemplos, lo haremos de la siguiente manera:

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html

Como véis, hemos creado la carpeta con el nombre de nuestro dominio y en su interior una carpeta «public_html».

Paso 2 – Conceder permisos

Ya hemos creado la estructura, pero estos directorios son propiedad de nuestro usuario root. Si queremos que nuestro usuario pueda modificar los archivos que se encuentren en su interior, habrá que cambiar su propiedad.

sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/test.com/public_html

La variable $USER tomará el valor del usuario que ha iniciado la sesión. De modo que que al pulsar «Intro», asignaremos nuestro usuario a estos directorios. También hay que modificar los permisos para asegurarnos de que la lectura esté permitida en el directorio web general de Apache.

sudo chmod -R 755 /var/www

Al terminar este paso, tenemos que disponer de una estructura de carpetas con los permisos necesarios para servir el contenido. Además, el usuario debe ser capaz de crear contenido dentro de esos directorios.

Paso 3 – Crear páginas de demostración en cada virtual host

Una vez creada la estructura y asignados los permisos, vamos a crear cierto contenido para mostrar de ejemplo. Para ello vamos a crear un archivo «index.html» dentro del directorio «public_html» de cada sitio creado.

nano /var/www/example.com/public_html/index.html
nano /var/www/test.com/public_html/index.html

El contenido de cada uno de estos archivos será el mismo. Lo único que cambiará será el nombre del dominio en el que estamos en la etiqueta «Title». El código HTML para example.com sería el siguiente.

<html>
<head>
<title>Bievenidos a Example.com!</title>
</head>
<body>
<h1>¡Completado! El virtual host para example.com está funcionando</h1>
</body>
</html>

En el código HTML de test.com únicamente sustituiremos «example.com» por «test.com» en la etiqueta «Title». Cuando terminemos, guardaremos el contenido de los archivos y ya tendremos creadas las páginas de prueba.

Paso 4 – Crear los nuevos archivos del virtual host

Los archivos del virtual host son los encargados de especificar la configuración real de los dominios que tenemos hospedados, indicando cómo debe responder el servidor Apache a las diferentes peticiones. Para crear este archivo podemos hacer uso del que trae por defecto Apache y que tiene por nombre «000-default.conf». Este archivo será el que copiemos en el interior de cada uno de nuestros dominios. Como hemos dicho anteriormente, lo primero que haremos es copiar ese archivo que trae Apache por defecto.

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf

Después lo editaremos con el programa que utilicemos habitualmente. En su interior nos encontraremos algo parecido a lo siguiente:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Llegados a este punto, lo que tenemos que hacer es personalizar el código para nuestro dominio. Para ello añadiremos algunas directivas adicionales. Cabe destacar que esta estructura atenderá cualquier petición que se haga del dominio mediante el puerto 80, que es el puerto por defecto del protocolo HTTP. Lo primero que haremos será cambiar la directiva «ServerAdmin» para añadir nuestra propia dirección de correo electrónico.

ServerAdmin admin@example.com

Después tenemos que añadir dos directivas. En la primera, de nombre «ServerName», estableceremos el dominio que debe coincidir para esta definición de virtual host que estamos configurando. En el segundo, «ServerAlias», indicaremos los nombres que deben coincidir como si se tratase del nombre base. Esto es importante, por ejemplo, para responder a peticiones realizadas desde direcciones que hacen uso de «www».

ServerName example.com
ServerAlias www.example.com

También tenemos que cambiar la ubicación del directorio raíz para este dominio. Esto lo haremos en la directiva «DocumentRoot».

DocumentRoot /var/www/example.com/public_html

El contenido final del archivo deberá ser algo parecido a lo siguiente:

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Una vez hayamos hecho esto, guardaremos los cambios y haremos lo mismo con el otro dominio, cambiando example.com por test.com.

Paso 5 – Habilitar los archivos del nuevo virtual host

Ahora que ya hemos creado nuestros archivos del virtual host, toca activarlos. Para ello podemos hacer uso de algunas herramientas que ofrece Apache para este fin, como «a2ensite».

sudo a2ensite example.com.conf
sudo a2ensite test.com.conf

Una vez ejecutado, habrá que reiniciar Apache para que los cambios tengan efecto.

sudo service apache2 restart

Lo más probable es que se muestre un mensaje por pantalla similar al siguiente:

* Restarting web server apache2
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

Se trata de un mensaje inofensivo que no afecta a nuestro sitio.

Paso 6 – Configurar el archivo host local (Opcional)

Si hemos usado dominios ficticios en lugar de dominios reales (como en nuestro ejemplo), para poder probar que todo funciona de forma correcta tenemos que modificar el archivo host del equipo de forma temporal. Según el sistema operativo de nuestra máquina local, la ubicación de este archivo estará en un sitio o en otro. Pero en todos los casos el funcionamiento será el mismo: tendremos que indicar la dirección IP pública de la máquina seguida del nombre del dominio. En nuestro caso, suponiendo que la dirección IP es 111.111.111.111, tenemos que añadir las siguientes líneas (una por cada dominio).

111.111.111.111 example.com
111.111.111.111 test.com

Al hacer esto forzamos a que los nombres de los dominios respondan a las direcciones IP que hemos indicado.

Paso 7 – Probar que todo funciona bien

Si hemos realizado de forma correcta todos los pasos anteriores, al colocar el dominio example.com en el navegador tendríamos que ver por pantalla el contenido del archivo index.html. Lo mismo con el dominio test.com. Si para cada dominio se muestra un mensaje diferente, es señal de que todo funciona correctamente y que hemos configurado dos hosts virtuales en la misma máquina. Como ya comentamos al principio de esta entrada, podemos crear tantos como queramos, siempre y cuando nuestra máquina soporte toda la carga que puedan generar.

Si te ha gustado, compártelo en redes sociales