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.
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 sustituirejemplo.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
y /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 puerto80
(el puerto por default paraHTTP
). 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ónVirtualHost
, y a su vez cada secciónVirtualHost
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 archivoindex.html
oindex.php
(si está instalado PHP y definidoindex.php
como archivo principal), etc.+FollowSymLinks
: Un signo de más antes deFollowSymLinks
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.
3 ideas sobre “Cómo configurar Servidores Virtuales (Virtual Hosts) en Apache y Debian 10 Buster”
duda ¿Cómo crea el archivo conf?
Hola! Como dice el tutorial, usando el editor de textos de tu preferencia, con los datos del tutorial.
Perfecto muchas gracias