Configuración de servidores virtuales en Apache

Haciendo un repaso a los tutoriales de configuración del servidor web Apache, tenemos:

En este tutorial configuraremos servidores virtuales para Apache, por lo que deberás realizado los dos anteriores para estar familiarizado con los términos que manejaremos.

Consideraciones iniciales

Cuando el servidor de Apache se carga, verifica todos los archivos .conf alojados en el directorio /etc/httpd/conf.d/ y que se refiere a configuraciones adicionales que Apache debe seguir; esta ruta predeterminada se localiza en el archivo /etc/httpd/conf/httpd.conf en la directiva IncludeOptional, por lo que si quisieras modificarla, tendrías que editar dicho archivo.

...
IncludeOptional conf.d/*.conf
...

Cualquier cambio en estos archivos requerirá recargar el servicio httpd.

Paso 1.- Crear los directorios de contenido web

Por cada servidor virtual tendremos que crear su propio directorio de contenido web o DocumentRoot, un buen sitio para alojar estos directorios es en /var/www/html/

$ sudo mkdir /var/www/html/sitio01

Podemos crear y abrir un archivo en dicho directorio para las pruebas necesarias.

$ sudo nano /var/www/html/sitio01/index.html

Y le agregaremos un simple mensaje

<h1>Index del sitio 01</h1>

Paso 2. Crear los archivos de configuración para el servidor Apache

Creamos el archivo de configuración para el sitio 01. Es buena idea darles nombres representativos a los archivos de configuración, con el fin de facilitar su búsqueda posterior para edición.

$ sudo nano /etc/httpd/conf.d/sitio01.conf

<VirtualHost *:80>
        ServerName your_domain_or_ip/sitio01
        DocumentRoot /var/www/html/sitio01

        <Directory /var/www/html/sitio01>
                Options -Indexes
                AllowOverride all
                Require all granted
        </Directory>

        ErrorLog /var/log/httpd/error_sitio01.log
        CustomLog /var/log/httpd/access_sitio01.log combined
</VirtualHost>

El archivo de configuración contiene las siguientes directivas

  • Servername: El dominio o subdominio al que responderá el servidor virtual
  • DocumentRoot: La ruta en el sistema de archivos donde se aloja el contenido web del sitio virtual
  • Directory: Un bloque donde se pueden configurar opciones especificas para una ruta. En este caso configuraremos la ruta del contenido web y todo lo que en dicho directorio se encuentre.
  • Options: Opciones de Apache para la ruta del bloque Directory. La opcion -Indexes no permite visualizar el contenido de los directorios que no contengan archivos index.html, index.htm o similares.
  • AllowOverride All: Permite el uso de .htaccess que contienen directivas de configuración solo aplicables a los directorios donde se encuentran.
  • Require all granted: Permite explícitamente el acceso del servidor web al directorio
  • Errorlog: El archivo donde se guardará el registro de errores del servidor. Si no se especifica se usará el archivo común de Apache.
  • CustomLog: Es el registro de accesos y peticiones al servidor, donde se indican fechas, direcciones de los clientes, recursos solicitados, resultados de las peticiones, etc. Si no se especifica uno concreto, se usa el archivo común de Apache.

Recargamos la configuración del servicio Apache y ya podemos probar el servidor virtual recién creado de Apache.

Un problema que podemos tener es que el servidor por defecto, que responde por dirección IP y por el dominio configurado como nombre del servidor ahora responderá al primer servidor virtual cargado por orden alfabético. En otras palabras, nos llevará al servidor localhost que creamos en la entrada pasada, y como dicho servidor tiene configurada una redirección del puerto 80 al 443, no nos mostrará de forma adecuda lo que estamos configurando ahora.

Para evitar esto, agregaremos la configuración SSL al servidor virtual y usaremos el mismo certificado y clave.

Paso 3.- Agregar SSL al servidor virtual

Editamos el archivo .conf del servidor virtual.

$ sudo nano /etc/httpd/conf.d/sitio01.conf

Y añadiremos un nuevo bloque VirtualHost al final del archivo:

<VirtualHost *:443>
        ServerName your_domain_or_ip/sitio01
        DocumentRoot /var/www/html/sitio01

        <Directory /var/www/html/sitio01>
                Options -Indexes
                AllowOverride all
                Require all granted
        </Directory>
        
        SSLEngine On
        SSLCertificateFile /etc/pki/tls/private/apache-selfsigned.key
        SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt

        ErrorLog /var/log/httpd/error_sitio01.log
        CustomLog /var/log/httpd/access_sitio01.log combined
</VirtualHost>

El contenido es prácticamente el mismo, pero cambiamos el puerto 80 por el 443 y se añaden las directivas SSLEngine on para usar el módulo SSL, así como las rutas donde se alojan los certificados que hemos generado antes.

Paso 4.- Redireccionar de HTTP a HTTPS

Lo ultimo que nos queda por hacer es redireccionar todas las peticiones que lleguen por el puerto 80 (http) al puerto 443 (https) y así seguimos trabajando con el archivo sitio01.conf para agregar el bloque referente a las redirecciones.

$ sudo nano /etc/httpd/conf.d/sitio01.conf

...
<VirtualHost *:80>
   ServerName your_domain_or_ip/sitio01
   Redirect / https://your_domain_or_ip/sitio01/
</VirtualHost>

Paso 5.- Revisa tu archivo .conf

Despues de los cambios realizados, tu archivo deberá tener un aspecto como este

<VirtualHost *:443>
        ServerName your_domain_or_ip/sitio01
        DocumentRoot /var/www/html/sitio01

        <Directory /var/www/html/sitio01>
                Options -Indexes
                AllowOverride all
                Require all granted
        </Directory>
        
        SSLEngine On
        SSLCertificateFile /etc/pki/tls/private/apache-selfsigned.key
        SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt

        ErrorLog /var/log/httpd/error_sitio01.log
        CustomLog /var/log/httpd/access_sitio01.log combined
</VirtualHost>
<VirtualHost *:80>
   ServerName your_domain_or_ip/sitio01
   Redirect / https://your_domain_or_ip/sitio01/
</VirtualHost>

Recarga el servicio httpd y verifica el funcionamiento del servidor virtual.

$ sudo systemctl restart httpd

Tu servidor deberá funcionar de la siguiente forma:

Al ingresar mediante http deberá existir una redirección a https y deberá mostrarse el archivo localizado en el directorio que creamos.

En caso de que no funcione como se esperaba, deberás revisar el archivo configurado con anterioridad para verificar que se encuentre funcionando adecuadamente.

Referencias externas:

Deja una respuesta

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