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!
Configuración del servidor
/etc/apache2
: El directorio de configuración de Apache. Todos los archivos de configuración de Apache residen aquí./etc/apache2/apache2.conf
: El archivo de configuración principal de Apache. Esto se puede modificar para realizar cambios en la configuración global de Apache. Este archivo es responsable de cargar muchos de los otros archivos en el directorio de configuración./etc/apache2/ports.conf
: este archivo especifica los puertos en los que escuchará Apache. De forma predeterminada, Apache escucha en el puerto 80 y, además, escucha en el puerto 443 cuando se habilita un módulo que proporciona capacidades SSL./etc/apache2/sites-available/
: el directorio donde se pueden almacenar los hosts virtuales por sitio. Apache no usará los archivos de configuración que se encuentran en este directorio a menos que estén vinculados alsites-enabled
directorio. Por lo general, toda la configuración del bloque del servidor se realiza en este directorio y luego se habilita vinculando al otro directorio con ela2ensite
comando./etc/apache2/sites-enabled/
: el directorio donde se almacenan los hosts virtuales habilitados por sitio. Por lo general, estos se crean vinculando los archivos de configuración que se encuentran en elsites-available
directorio con la extensióna2ensite
. Apache lee los archivos de configuración y los enlaces que se encuentran en este directorio cuando se inicia o recarga para compilar una configuración completa./etc/apache2/conf-available/
,/etc/apache2/conf-enabled/
: estos directorios tienen la misma relación que los directoriossites-available
ysites-enabled
, pero se utilizan para almacenar fragmentos de configuración que no pertenecen a un host virtual. Los archivos en elconf-available
directorio se pueden habilitar con ela2enconf
comando y deshabilitar con ela2disconf
comando./etc/apache2/mods-available/
,/etc/apache2/mods-enabled/
: Estos directorios contienen los módulos disponibles y habilitados, respectivamente. Los archivos que terminan en.load
contienen fragmentos para cargar módulos específicos, mientras que los archivos que terminan en.conf
contienen la configuración de esos módulos. Los módulos se pueden habilitar y deshabilitar usando el comandoa2enmod
y .a2dismod
Videos