Cómo configurar Servidores Virtuales (Virtual Hosts) en Apache y Debian 10 Buster

En éste tutorial o guía paso a paso se describe como configurar servidores virtuales (virtual hosts) en Apache sobre Debian 10 Buster. Los servidores virtuales también son llamados sitios web o páginas web, y permiten servir más de uno usando el mismo servidor web, en éste caso, Apache.

Cuando recién instalamos LAMP (“Linux, Apache, MySQL, PHP”), se muestra la página por default de Apache, y es necesario configurar al servidor Apache para mostrar uno o varios servidores virtuales para mostrar lo que necesitemos.

Página por default de Apache en Debian

Prerequisitos

Hay que asegurarnos de que contamos con lo siguiente para empezar:

  • Un dominio o dirección de nombre que apunte a la dirección IP de nuestro servidor. En éste ejemplo usaremos ejemplo.com (recuerda sustituir ejemplo.com con el dominio o dirección de nombre con el que cuentes).
  • Tener instalado Apache.
  • Una cuenta con privilegios sudo

1: Crear la estructura de directorios

El directorio raiz (document root) de cada servidor virtual es el lugar en el que residen y se despachan los archivos de cada sitio web. Se puede establecer una estructura de directorios en el lugar que se desee, y éste tutorial vamos a usar la siguiente estructura:

/var/www/
├── dominio1.com
│   └── public_html
├── dominio2.com
│   └── public_html
├── dominio3.com
│   └── public_html

Cada dominio o dirección de nombre en nuestro servidor tendrá su directorio raíz como /var/www/<nombre_de_dominio>/public_html

El directorio /var/www ya existe desde que está instalado Apache. Vamos a empezar por crear el directorio de nuestro primer servidor virtual, ejemplo.com

sudo mkdir -p /var/www/ejemplo.com/public_html

El comando mkdir -p crea los directorios necesarios, por lo que en un solo paso se crean /var/www/ejemplo.com/var/www.ejemplo.com/public_html

Luego, crearemos un archivo index.hml en el directorio que acabamos de crear, por lo que primero nos cambiamos al directorio recién creado

cd /var/www/ejemplo.com/public_html

y ya estando ahí, abre tu editor favorito y escribe lo siguiente, guardándolo con el nombre index.html Linux no te dejará crear el archivo sin usar sudo, por lo que deberás usarlo para abrir el editor ya que el directorio pertenece al usuario root

<html>
  <head>
    <meta charset="utf-8">
    <title>Bienvenido a ejemplo.com</title>
  </head>
  <body>
    <h1>Muy bien!</h1>
    <p>Página de ejemplo.com!</p>
  </body>
</html>

Apache corre usando al usuario www-data, por lo que para que los permisos sean los correctos, debemos cambiar al dueño tanto de los directorios como del archivo que acabamos de crear

sudo chown -R www-data: /var/www/ejemplo.com

El comando chown -R www-data: cambia al dueño y al grupo www-data del directorio especificado y a todos los archivos y directorios que están debajo en un solo paso.

Creación de los servidores virtuales

En Debian, los archivos de configuración de los servidores virtuales de Apache se encuentran en el directorio /etc/apache2/sites-available y pueden habilitarse creando ligas simbólicas al directorio /etc/apache2/sites-enabled

Nos cambiamos al directorio de configuraciones de servidores virtuales de apache

cd /etc/apache2/sites-available

y estando ahí, sin olvidar utilizar sudo porque el dueño del directorio es root, escribimos lo siguiente y lo guardamos con el nombre de archivo ejemplo.com.conf

<VirtualHost *:80>
    ServerName ejemplo.com
    ServerAlias www.ejemplo.com
    ServerAdmin webmaster@ejemplo.com
    DocumentRoot /var/www/ejemplo.com/public_html

    <Directory /var/www/ejemplo.com/public_html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/ejemplo.com-error.log
    CustomLog ${APACHE_LOG_DIR}/ejemplo.com-access.log combined
</VirtualHost>
  • VirtualHost: La sección que define que se trata de un servidor virtual (virtual host), y que espera recibir conexiones en el puerto 80 (el puerto por default para HTTP). Si lo notas, todo el archivo de configuración del servidor virtual está dentro de ésta sección. Si hay varios archivos de configuración, cada uno deberá contener una sección VirtualHost, y a su vez cada sección VirtualHost contiene varias directivas y sus parámetros para definir a cada servidor virtual.
  • ServerName: El nombre del servidor virtual. La dirección de nombre deberá ser la misma que la que contiene ésta directiva, ó la de la siguiente directiva…
  • ServerAlias: Un nombre alterno para el mismo servidor virtual. Si la dirección de nombre es igual que éste parámetro, entonces también aplicarán las definiciones para éste servidor virtual.
  • ServerAdmin: La dirección de email del administrador del servidor virtual. Se mostrará cuando existan errores.
  • DocumentRoot: Directorio virtual donde están los archivos que se procesarán y se mostrarán en éste servidor virtual.
  • Directory: La definición de un servidor virtual puede contener una o varias directivas Directory, donde se definen parámetros para tratar con diferentes directorios. Se comienza por definir los parámetros del directorio raíz del servidor virtual.
    • Options: Un parámetro de la directiva Directory en el cual se definen sus opciones.
      • -Indexes: Un signo de menos antes de Indexes define que no se muestren los contenidos del directorio cuando no contiene un archivo index.html o index.php (si está instalado PHP y definido index.php como archivo principal), etc.
      • +FollowSymLinks: Un signo de más antes de FollowSymLinks quiere decir que se sigan las ligas simbólicas si es que existen en el directorio.
    • AllowOverride: En ésta directiva se especifica que directivas se permite que se cambien si existiera un archivo aparte de nombre .htaccess
      • All: All se refiere a todo, entonces ésta directiva indica que si existe un archivo .htaccess, entonces todas las directivas que cotenga pueden redefinir las directivas del directorio, aunque se definan diferente en los archivos de configuración de Apache.
  • ErrorLog: La directiva define dónde y que nombre tiene la bitácora de errores (muy útil para diagnosticar lo que no funcione en el servidor virtual).
  • CustomLog: Ésta directiva define dónde y que nombre tiene la bitácora de accesos al servidor virtual (útil para saber que se solicita al servidor virtual, cómo se solicita, desde dónde se solicita, etc.).

Puedes nombrar al archivo de configuración de un servidor virtual como tu quieras, pero se recomienda el dominio o dirección de nombre, para que sea más fácil identificar a cada servidor virtual y cual es su propósito al mismo tiempo.

Para habilitar el servidor virtual, es necesario crear una liga simbólica del archivo de configuración al directorio /etc/apache2/sites-enabled y desde ahí lee Apache todos los sitios que están “habilitados”, posibilitando habilitar y deshabilitar servidores virtuales a discreción. Puedes crear la liga simbólica como se muestra a continuación

sudo ln -s /etc/apache2/sites-available/ejemplo.com.conf /etc/apache2/sites-enabled/

O puedes usar el script que se instaló cuando instalaste Apache, lo que se recomienda en lugar de crear la liga simbólica a mano

sudo a2ensite ejemplo.com

Una vez que está creado el archivo de configuración del servidor virtual y habilitado, se procede a verificar que la configuración no tenga errores

sudo apachectl configtest

Y si todo está correcto, aparecerá

Syntax OK

En caso de haber cometido algún error, éste se mostrará y se tendrá que corregir el archivo de configuración del servidor virtual.

En caso de ser correcta la nueva configuración, procedemos a decirle a Apache que vuelva a leer su configuración

sudo systemctl reload apache2

Para verificar que el nuevo servidor virtual está funcionando adecuadamente, pasamos a escribir en un browser la dirección http://ejemplo.com y deberá aparecer la página web del archivo index.html que creamos en un paso anterior:

Muy bien!

Página de ejemplo.com!

Conclusiones

En ésta guía o tutorial paso a paso logramos creamos y configuramos un servidor virtual en Apache sobre Debian. Esto puede servir para instalar algún sistema de manejo de contenidos como WordPress o una nube privada como Nextcloud, o hacer pruebas, o programar para web, etc.

Niebla Research instala, configura y pone a punto servidores virtuales, LAMP, WordPress, Nextcloud y otros. Estoy a tus órdenes en la sección de contacto de mi empresa y en los comentarios para aclarar cualquier duda, error u omisión.

Dejar un comentario

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