Virtual Hosts de Apache, cómo los podemos configurar en Ubuntu 20.04

about Virtual host Apache

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:

crear estructura de directorios

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:

home codigo dominio1

 
<!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

home código dominio2

<!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:

virtual host para el dominio1

<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:

a2ensite dominio1

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:

sintaxys ok

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:

home domino1

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.

virtual hosts apache navegador

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.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Carlos dijo

    Hola, me sirvío mucho para poder crear host virtuales, pero al correr el apachectl confitest me arrojo el siguiente error: «AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘Se rverName’ directive globally to suppress this message
    Syntax OK»

    No se que puede estar fallando