Configuración del VirtualHost de Apache 2.4 Modificando el directorio del servidor web en Debian Strecht

, por laura

Instalación del Servidor web Apache

Para empezar podemos comprobar si tenemos instalado en la máquina el paquete Apache2:

dpkg --list|grep apache

En la consola nos debe aparecer, si está instalado el paquete, algo así:

ii  apache2                               2.4.23-4                             amd64        Apache HTTP Server
ii  apache2-bin                           2.4.23-4                             amd64        Apache HTTP Server (modules and other binary files)
ii  apache2-data                          2.4.23-4                             all          Apache HTTP Server (common files)

Si está instalado, pasaremos a configurar el virtualhost si así lo deseamos, en caso contrario podemos instalar el servidor Apache de manera sencilla en sistemas operativos Linux basados en el gestor de paquetes de debian es tan fácil como ejecutar el siguiente comando en una consola:

$ apt-get install apache2

Al hacerlo vemos que se ha instalado la versión apache actual 2.4.23-4 .
Comprobamos que se ha instalado correctamente accediendo desde el navegador a la dirección http://localhost . Si todo ha ido bien, aparecerá una página por defecto del Apache2 similar a esta:

Este sería el proceso si no queremos tener más de un dominio en el mismo servidor, pero si como es el caso queremos modificar el comportamiento por defecto del servidor web Apache, podremos añadir los llamados VirtualHost.

Qué son y para qué sirven los Virtual Host

Los VirtualHost o alojamiento compartido es un método para alojar diversos nombres de dominios en un uno o varios servidores. De este modo se consigue un ahorro de recursos tales como ciclos de memoria y procesador, energía, etc. Con VirtualHost normalmente se hace referencia a servidores web, pero nada impide utilizarlos para otro tipo de servicios de Internet.

El VirtualHost se suele utilizar para ofrecer alojamiento compartido a precios menores, al ser posible alojar a muchos clientes en un sólo servidor. Sin embargo, también es común que una sola empresa quiera utilizar varios nombres de dominio en la misma máquina.

Existen varios tipos de VirtuaHost, los basados en el nombre de dominio y basados en la dirección IP, los principales en uso son:

  • Los basados en el nombre de dominio utilizan el nombre de dominio del cliente, así puede "ahorrar" direcciones IP y sobrecarga administrativa.
  • Los basados en IP hacen uso de una IP independiente para cada nombre de dominio, por lo que se hacen necesarias tantas direcciones IP como dominios tenga la empresa.
  • También es posible utilizar el virtualHost basado en el puerto de acceso a la máquina, pero no es tan usual ya que no es poco amigable para los usuarios.

Configuración del VirtualHost en Apache

Una vez tenemos el servidor web Apache2 instalado y funcionando pasamos a configurar a nuestro gusto el servidor utilizando un virtual hosting (virtual host o vhost).

Como ya se ha dicho con este sistema conseguimos que más de un sitio web funcione en un solo ordenador. Así podemos tener varios nombres de dominio para la misma dirección IP. Estas configuraciones son transparentes para el usuario que visita las diferentes webs alojadas.

De este modo, podemos utilizar virtualhost para tener varias páginas web en el mismo servidor, podemos tener varios servidores para servir la misma web, o también podemos cambiar la ubicación de los archivos del servidor web aprovechando las características del vhost. Para esto vamos a editar el archivo por defecto: /etc/apache2/sites-available/000-default.conf cuyo contenido debe ser algo similar a esto:

<VirtualHost *:80>
   
   #ServerName www.example.com

   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
   
</VirtualHost>
                                                                             

Esta es la configuración básica, ahora debemos adecuarlo a nuestras necesidades, la dejaremos como sigue:

ServerName localhost
<VirtualHost *>
       ServerName midominio.com
       ServerAlias midominio.com
       DocumentRoot /carpeta1
       <Directory />
               Options +FollowSymLinks
               AllowOverride None
               Require all granted
       </Directory>
       <Directory  /carpeta1>
               Options -Indexes +FollowSymLinks -MultiViews
               Require all granted
               DirectoryIndex index.php index.html
               AllowOverride All
       </Directory>
      ErrorLog ${APACHE_LOG_DIR}/midominio/error.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog ${APACHE_LOG_DIR}/midominio/access.log combined
</VirtualHost>

Si tenemos más de un VirtualHost en la misma máquina, tenemos dos opciones:

  • o bien añadimos en el mismo archivo 000-default.conf, a continuación del primer vhost configurado. Justo después de la etiqueta escribimos de nuevo las mismas líneas (cambiando lo que sea necesario para cada caso),
  • o bien, podemos crear un nuevo archivo en el mismo directorio /etc/apache2/sites-available/ en que está el 000-default.conf pero con otro nombre y modificando las líneas necesarias. Luego hemos de ir al directorio sites-enabled y hacer un enlace simbólico hasta este nuevo archivo:

sudo ln -s ../sites-available/dominio.conf   dominio.conf

De este modo tendremos un archivo por cada dominio virtualizado. Ambos métodos son equivalentes, es cuestión de gustos.

Por otro lado, y para evitar los típicos errores en estas configuraciones, debemos hacer lo que sigue:

  • Crear la carpeta para que se guarden los logs, midominio/ en el directorio preparado para almacenar los logs, es decir, en /var/log/apache2, siempre con permisos de superusuario root. Si la carpeta no existe cuando reiniciemos el servidor, nos saldrá el siguiente error:

No such file or directory: AH02291: Cannot access directory '/var/log/apache2/midominio/' for error log of vhost defined at /etc/apache2/sites-enabled/000-default.conf:1

Esta carpeta y los dos archivos que se almacenan en /var/logs/apache2 guardan toda la información sobre el servidor en cuanto a accesos y errores, estos archivos serán de vital importancia, si en algún momento no se puede acceder a la web para conocer los motivos exactos que expliquen el fallo.

  • Darle nombre al servidor. El error que nos podría salir si nos saltamos este paso es:

    AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

    A partir de la versión 2.4 de Apache [1] tenemos que ejecutar los siguientes pasos en la shell :

  1. Accedemos al directorio de configuraciones en Apache:
    $ cd /etc/apache2/conf-available/
  2. Creamos y editamos el archivo servername.conf :
    $ sudo vim servername.conf
  3. Escribimos en él esta línea:
    ServerName midominio
  4. Cerramos el archivo y ejecutamos en la consola:
    $ sudo a2enconf servername
    donde:
    • a2enconf es un comando que activa el archivo de configuración en Apache 2.4 .
    • servername se refiere al nombre del fichero de configuración recién creado servername.conf . Si se ha escogido cualquier otro nombre para dicho archivo de configuración se usará dicho nombre en lugar de servername en el comando. Por ejemplo, si se creó el servidorNombreMidominio.conf, el comando deberá escribirse como sigue:
      $ sudo a2enconf servidorNombreMidominio.

Por último, reiniciamos el servidor web Apache para que se produzca la activación de los vhost, esto se consigue ejecutado con permisos de root alguno de estos tres comandos:

$ sudo apache2 start
o bien
$ sudo service apache2 reload
o bien
$ sudo apache2ctl graceful

Si todo ha ido bien, este comando no nos generará ningún error a la salida. Y ya tendremos nuestro VirtualHost configurado y funcionando.

Ver en línea : Virtual Host en Apache

Notas

[1Para versiones anteriores de Apache seguiremos los mismos pasos que se comentan arriba, por ello creamos el archivo servername.conf y lo situamos en el directorio de /etc/apache2/conf-d/