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

Configuración de las cookies
Stackscale, Grupo Aire logo

Al aceptar las cookies acepta voluntariamente el tratamiento de sus datos. Esto también incluye, por un tiempo limitado, su consentimiento de acuerdo con el Artículo 49 (1) (a) RGPD para el procesamiento de datos fuera del EEE, por ejemplo, en los EE.UU. En estos países, a pesar de una cuidadosa selección y obligación de los proveedores de servicios, no se puede garantizar el alto nivel europeo de protección de datos.

Si los datos se transfieren a los EE.UU., existe, por ejemplo, el riesgo de que las autoridades de los EE.UU. procesen estos datos con fines de control y supervisión sin que estén disponibles recursos legales efectivos o sin que se puedan hacer valer todos los derechos del interesado. Puede revocar su consentimiento en cualquier momento.

Cookies necesarias

Son aquellas que ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no podrá funcionar adecuadamente sin estas cookies. Le informamos de que puede configurar su navegador para bloquear o alertar sobre estas cookies, sin embargo, es posible que determinadas áreas de la página web no funcionen. Estas cookies no almacenan ninguna información de identificación personal.

- moove_gdpr_popup

Cookies analíticas

Son aquéllas que permiten al Editor de las mismas, el seguimiento y análisis del comportamiento de los usuarios de los sitios web a los que están vinculadas. La información recogida mediante este tipo de cookies se utiliza en la medición de la actividad de los sitios web, aplicaciones o plataformas y para la elaboración de perfiles de navegación de los usuarios de dichos sitios, aplicaciones y plataformas, con el fin de introducir mejoras en función del análisis de los datos de uso que hacen los usuarios del servicio.

Google Analytics: Registra una identificación única que se utiliza para generar datos estadísticos acerca de cómo utiliza el visitante el sitio web. La información generada por la cookie sobre su uso de este sitio web generalmente se transmite a un servidor de Google en los EE. UU. y es almacenada allí por Google LLC, 1600 Amphitheatre Parkway Mountain View, CA 94043, EE.UU.

- _dc_gtm_UA-30121999-1

- _ga_C3BSYFJ6DM

- _gat_gtag_UA_30121999_1

- _ga

- _gcl_au

- _gid