Virtual Hosts de Apache, cómo los podemos configurar en Ubuntu 20.04
En el siguiente artículo vamos a echar un vistazo a los Virtual hosts de Apache. Antes de nada, es necesario explicar que un host virtual es una directiva de configuración de Apache que nos va a permitir ejecutar más de un sitio web en un solo servidor. El hecho de que se estén ejecutando en el mismo servidor físico, no resulta evidente para el usuario final.
Con los Virtual Hosts vamos a poder especificar la raíz del sitio (el directorio que contiene los archivos del sitio web), crear una política de seguridad separada para cada sitio, usar diferentes certificados SSL y mucho más.
En las siguientes líneas vamos a ver cómo configurar Apache Virtual Hosts en Ubuntu 20.04, y para ello debemos cumplir con los siguientes requisitos antes de continuar; uno o más nombres de dominio que apuntan a la IP de tu servidor público y un Apache instalado en Ubuntu.
Crear la estructura de directorios
La raíz de los documentos es el directorio donde se almacenan y sirven los archivos del sitio web para un nombre de dominio, en respuesta a las solicitudes. Podremos establecer la raíz en la ubicación que nos interese. Cada dominio alojado en el servidor Apache tendrá su raíz de documentos establecida en /var/www/nombre-de-dominio/public_html.
Vamos a empezar creando el directorio raíz para los dos dominios que voy a utilizar en este ejemplo:
sudo mkdir -p /var/www/dominio1.com/public_html sudo mkdir -p /var/www/dominio2.com/public_html
También crearemos un archivo index.html dentro del directorio raíz de documentos de cada dominio. Este se va a mostrar cuando visitemos el dominio desde el navegador:
sudo vim /var/www/dominio1.com/public_html/index.html
Dentro del archivo, vamos a pegar el siguiente contenido:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8">dominio1</title> </head> <body> <h1>Home del dominio1</h1> </body> </html>
Para el segundo dominio, editaremos su archivo index.html y le añadiremos el siguiente contenido:
sudo vim /var/www/dominio2.com/public_html/index.html
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8">dominio2</title> </head> <body> <h1>Home del dominio2</h1> </body> </html>
Dado que los comandos anteriores se ejecutan con sudo, los archivos y directorios recién creados son propiedad de root. Para evitar problemas de permisos, vamos a cambiar la propiedad del directorio raíz de los dominios y de todos los archivos dentro de estos directorios al usuario de apache (www-data):
sudo chown -R www-data: /var/www/dominio1.com sudo chown -R www-data: /var/www/dominio2.com
Crear Virtual hosts
En los sistemas Ubuntu, los archivos de configuración de los Hosts virtuales para Apache se encuentran en el directorio /etc/apache2/sites-available. Se pueden habilitar creando enlaces simbólicos al directorio /etc/apache2/sites-enabled, que Apache lee durante el inicio.
Podremos nombrar los archivos de configuración como queramos. Pero la mejor práctica es utilizar el nombre de dominio como el nombre del archivo de configuración del host virtual. Ahora vamos a abrir nuestro editor de texto favorito y a crear los archivos básicos de configuración. En el ejemplo solo voy a mostrar el código para el dominio1:
sudo vim /etc/apache2/sites-available/dominio1.com.conf
Dentro añadiremos algo como lo siguiente, pero para el dominio2, tendremos que cambiar dominio1 por dominio2 en el siguiente código:
<VirtualHost *:80> ServerName dominio1.com ServerAlias www.dominio1.com ServerAdmin webmaster@dominio1.com DocumentRoot /var/www/dominio1.com/public_html <Directory /var/www/dominio1.com/public_html> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/dominio1.com-error.log CustomLog ${APACHE_LOG_DIR}/dominio1.com-access.log combined </VirtualHost>
- ServerName → Va a indicar el dominio que debe coincidir con esta configuración de host virtual. Este debería ser el nombre de dominio.
- ServerAlias → Todos los demás dominios o subdominios que deberían coincidir para este host virtual, como el subdominio www.
- DocumentRoot → Aquí se indicará el directorio desde el cual Apache servirá los archivos.
- Opcions → Esta directiva controla qué funciones del servidor están disponibles en un directorio específico.
- Indexes → Evita listados de directorios.
- FollowSymLinks → Cuando esta opción está habilitada, Apache va a seguir los enlaces simbólicos.
- AllowOverride → Va a especificar qué directivas declaradas en el archivo .htaccess pueden anular las directivas de configuración.
- ErrorLog, CustomLog → Aquí se van a especificar las ubicaciones de los archivos de registro.
Una vez guardados los archivos, para habilitar el nuevo archivo de host virtual, vamos a crear un enlace simbólico desde el archivo de host virtual al directorio habilitado para los sitios. Esto lo haremos utilizando el script de a2ensite:
sudo a2ensite dominio1.com
La otra opción es crear manualmente un enlace simbólico como se muestra a continuación:
sudo ln -s /etc/apache2/sites-available/dominio1.com.conf /etc/apache2/sites-enabled/
Una vez hecho esto, podemos probar la configuración para detectar errores de sintaxis con:
sudo apachectl configtest
Si no hay errores, en la terminal veremos un resultado como el siguiente:
Continuamos reiniciando el servicio Apache para que los cambios surtan efecto:
sudo systemctl restart apache2
Finalmente, para verificar que todo funciona como esperamos, abriremos la URL http://dominio1.com en el navegador y deberíamos ver el contenido de la página index.html del dominio1:
Con los Virtual Hosts podremos alojar múltiples dominios en un solo servidor Ubuntu. Podremos repetir los pasos que se han descrito en las anteriores líneas para crear hosts virtuales adicionales para todos nuestros dominios.
Lo expuesto en este artículo es solo una explicación básica sobre Virtual Host y su configuración en Ubuntu. Se puede obtener más información en la página web de Apache.