Cómo configurar hosts virtuales de Apache en Ubuntu 22.04

El concepto de alojamiento virtual lo utilizan las empresas para alojar varios sitios web utilizando una sola máquina. Se puede conseguir con un método «basado en IP» o con un enfoque «basado en nombres». En el alojamiento «basado en IP» tenemos direcciones IP distintas para cada sitio web. En el caso del alojamiento «basado en nombres», tenemos varios nombres funcionando en cada dirección IP.

¿Qué vamos a hacer?

En este tutorial veremos cómo podemos alojar dos hosts virtuales en un sistema Ubuntu 22.04 utilizando el alojamiento virtual basado en nombres. Utilizaremos el servidor web Apache.

Empieza ahora…

Paso 1. Actualiza el repositorio y también el sistema operativo:

sudo apt update
sudo apt upgrade -y

Paso 2. Instala el servidor web Apache para Ubuntu utilizando el comando:

sudo apt install apache2 -y

Instalar Apache
Paso 3. Reinicia el servidor web Apache y comprueba su estado ejecutando:

sudo systemctl restart apache2
sudo systemctl status apache2

Reiniciar el servicio Apache

Salida de ejemplo:

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Mon 2022-06-27 09:32:14 UTC; 18s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 13093 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/S>
   Main PID: 13098 (apache2)
      Tasks: 55 (limit: 1146)
     Memory: 4.7M
        CPU: 25ms
     CGroup: /system.slice/apache2.service
             ??13098 /usr/sbin/apache2 -k start
             ??13099 /usr/sbin/apache2 -k start
             ??13100 /usr/sbin/apache2 -k start

Paso 4. Crea dos nuevos directorios dentro de la carpeta ‘www’. Que estos directorios sean host1 y host2.

De nuevo, dentro de estos directorios crea una carpeta más para guardar tus archivos web. Que estos directorios sean public_html y public_html. Estos directorios contendrán los archivos index.html correspondientes a estos dos hosts:

sudo mkdir -p /var/www/host1/public_html
sudo mkdir -p /var/www/host2/public_html

Los directorios ‘/var/www/host1/public_html’ y ‘/var/www/host2/public_html’ también representan la raíz del documento para los dos hosts virtuales.

Paso 5. Los directorios creados anteriormente son propiedad del usuario root. Para permitir que un usuario normal modifique los archivos de estos directorios, se debe cambiar la propiedad mediante los comandos:

sudo chown -R $USER:$USER /var/www/host1/public_html
sudo chown -R $USER:$USER /var/www/host2/public_html

La variable ‘$USER’ utilizará el valor del usuario actual conectado. El directorio ‘public_html’ será ahora propiedad de este usuario.

Paso 6. Ahora establece el permiso de ‘acceso de lectura’ para el directorio web general de apache:

sudo chmod -R 755 /var/www

Paso 7. Ahora estableceremos una página por defecto, es decir, index.html, para cada host virtual. Esto se puede hacer directamente desde el terminal utilizando el comando ‘echo’. Para el host virtual1:

sudo echo “Welcome to Virtual Host 1.” > /var/www/host1/public_html/index.html

Para el host virtual2:

sudo echo “Welcome to Virtual Host 2.” > /var/www/host2/public_html/index.html

Paso 8. Antes de continuar, utilizaremos un paso intermedio. Aquí modificaremos el archivo hosts para asignar la dirección del host local a los dos nombres de dominio del host virtual: www.host1.com y www.host2.com. Esto se hace para evitar registrar públicamente nuestros nombres de dominio.

sudo sh -c "echo 127.0.0.1 www.host1.com >> /etc/hosts"
sudo sh -c "echo 127.0.0.1 www.host2.com >> /etc/hosts"

Los pasos anteriores se muestran en la siguiente imagen:

Preparar los hosts virtuales
Paso 9. Ahora crearemos dos archivos de host virtual para cada uno de nuestros hosts virtuales. Son similares a los dos archivos de configuración por defecto de apache («000-default.conf»). Ahora estos archivos representarán la configuración que se utilizará para nuestros hosts virtuales y también regirán cómo responderá el servidor web Apache a las distintas peticiones de dominio.

El «000-default.conf» puede utilizarse como archivo base para cada host virtual. Simplemente copia este archivo en la misma ubicación con dos nombres diferentes: host1.conf y host2.conf:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host1.conf
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/host2.conf

Paso 10. Ahora abre los archivos y modifícalos para cada host virtual. Por ejemplo, para el host virtual1, los siguientes parámetros deben modificarse como:

<VirtualHost *:80>
ServerAdmin [email protected]

ServerName host1

ServerAlias www.host1.com

DocumentRoot /var/www/host1/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Para el segundo archivo (host2.conf), sustituye las entradas de host1 por las de host2. También puedes crear dos archivos nuevos e introducir el contenido anterior correspondiente a cada host virtual. El archivo host2.conf tendrá el siguiente aspecto:

<VirtualHost *:80>
ServerAdmin [email protected]

ServerName host2

ServerAlias www.host2.com

DocumentRoot /var/www/host2/public_html

ErrorLog ${APACHE_LOG_DIR}/error.log

</VirtualHost>

Paso 10. Ahora que hemos creado los archivos de host virtual, es el momento de habilitar realmente estos archivos. Para ello, Apache proporciona una herramienta llamada «a2ensite». Utiliza el siguiente comando para habilitarlos:

sudo a2ensite host1.conf
sudo a2ensite host2.conf

Paso 11. En el terminal, verás un mensaje para recargar apache para activar la nueva configuración, pero antes desactiva el sitio por defecto representado por «000-default.conf» utilizando el comando:

sudo a2dissite 000-default.conf

Paso 12. Comprueba si hay algún error de sintaxis en los archivos de configuración utilizando:

sudo apache2ctl configtest

Paso 13. Por último, recarga el servicio apache2 para aplicar los cambios realizados anteriormente:

sudo systemctl reload apache2

(1) Habilita Host1 y Host2 (2) Deshabilita el sitio por defecto (3) Recarga Apache

Probar la configuración del vhost de Apache

Ahora comprobaremos si todo está configurado correctamente. Abre un terminal en tu máquina y ejecuta el comando

$ curl www.host1.com

El comando anterior debería devolver el mensaje de la página de índice del host virtual1, del mismo modo, el comando siguiente debería mostrar el mensaje del host virtual2:

$ curl www.host2.com

Probar la configuración

Conclusión

Por fin lo hemos conseguido, nuestro alojamiento virtual funciona como esperábamos. También podemos realizar este tutorial utilizando Terraform, simplemente pruébalo.

También te podría gustar...