Virtual Host

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 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 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
      • AllAll 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 al sites-enableddirectorio. 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 el a2ensitecomando.
  • /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 el sites-availabledirectorio con la extensión a2ensite. 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 directorios sites-availablesites-enabled, pero se utilizan para almacenar fragmentos de configuración que no pertenecen a un host virtual. Los archivos en el conf-availabledirectorio se pueden habilitar con el a2enconfcomando y deshabilitar con el a2disconfcomando.
  • /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 .confcontienen la configuración de esos módulos. Los módulos se pueden habilitar y deshabilitar usando el comando a2enmody .a2dismod

Videos