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.