¿Cómo configurar hosts virtuales de Apache en Ubuntu?

 19/Jun/2016 -   Sistemas

El servidor Apache es el más utilizado en todo el mundo a la hora de servir contenido web en Internet. Se estima que es utilizado por más de la mitad de los servidores de todo el mundo, gracias a su potencia y flexibilidad que ha 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 creando 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 que están ahí hospedados. El número de dominios que se pueden crear son ilimitados, siempre y cuando la máquina pueda soportar toda la carga.

A lo largo de esta entrada, lo que pretendemos es que aprendáis a crear hosts virtuales con Apache en una máquina con Ubuntu. Podréis aprender los pasos para servir contenido diferente a los visitantes dependiendo del dominio indicado.

Prerrequisito en tu máquina virtual

Antes de seguir, debéis aseguraros de que disponéis de un usuario con privilegios root. También deberéis tener instalado Apache en vuestra máquina. Si no lo tenéis instalado, lo podéis hacer a través de “apt-get”.

sudo apt-get update
sudo apt-get install apache2

Después de esto, ya podremos seguir con esta 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 deberemos hacer, será crear la estructura de directorios que contendrá la información que se les mostrará a los visitantes que entren 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 vemos, 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 la propiedad de estos.

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, por lo que al pulsar intro, estaremos asignando nuestro usuario a estos directorios.

También debemos 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 final, debemos disponer de una estructura de carpetas con los permisos necesarios para servir el contenido, y 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

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, pero mostrando el nombre del dominio en el que estamos. 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>

Para test.com sería el mismo pero sustituyendo example.com por este otro nombre.

Al finalizar, 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 como el servidor Apache debe responder 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 será copiar ese archivo que trae Apache por defecto.

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

Ahora lo tendremos que editar con nuestro programa que utilicemos. 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>

Lo que tendremos que hacer, será personalizar el código para nuestro domino, añadiendo algunas directivas adicionales. Decir, que esta estructura atenderá cualquier petición que se haga del dominio mediante el puerto 80, el puerto por defecto del protocolo HTTP.

Lo primero que haremos será cambiar la directiva “ServerAdmin” para añadir una dirección de correo electrónico nuestra.

ServerAdmin admin@example.com

Después de esto, tendremos que añadir dos directivas. La primera de nombre “ServerName” donde estableceremos el dominio que debe coincidir para esta definición de virtual host que estamos configurando. El segundo será “ServerAlias”, donde se indicará 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

Lo otro que deberemos cambiar, será la ubicación del directorio raíz para este dominio, cosa que 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>

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 conseguir esto, podemos hacer uso de algunas herramientas que ofrece Apache para esto 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 no hemos utilizado dominios reales, sino que hemos estado utilizando dominios ficticios como ha sido el caso, para poder probar que todo funciona de forma correcta, debemos modificar el archivo hosts del equipo de forma temporal.

Dependiendo del 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 sea 111.111.111.111, debemos añadir las siguientes líneas, una por cada dominio.

111.111.111.111 example.com
111.111.111.111 test.com

Con esto lo que estamos haciendo es forzar 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, si en nuestro navegador colocamos el dominio example.com, deberíamos ver por pantalla el contenido del archivo index.html. De igual forma ocurriría con el dominio test.com.

Si para cada dominio, se muestra un mensaje diferente, será señal de que todo está correcto y que hemos configurado dos virtual hosts 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.