Apache: Crear un VirtualHost
En la actualidad la mayoría de los sistemas de aplicación han migrado sus funcionalidades a la nube, esto sugiere realizar un gran número de índices y referencias hacia muchos sitios web, cada uno con sus características especiales.
Cada sitio o aplicación web está asociada a un dominio específico y este a su vez, a un directorio interno en el servidor donde se desprende un pequeño árbol que permite mostrar la información a través de ciertos mecanismos de codificación y decodificación propia de cada lenguaje de programación que finalmente se traduce como HTTP.
Uno de los servidores web más populares y usados en el mercado es Apache, en un mismo servidor con Apache se pueden publicar muchos sitios web, el servicio debe traducir cuál es la petición solicitada para así resolver y mostrar el sitio respectivo al usuario.
Para esto se generan VirtualHost, uno por cada sitio y cada cual con su respectiva configuración.
Archivo de configuración
Todo VirtualHost se declara en un archivo de configuración, por lo general tendría un nombre como: misitioweb.conf
Se puede hacer referencia literal del dominio del sitio en cuestión pero la extensión final es .conf.
En el directorio de sitios disponibles se agregan todos los archivos de configuración de cada sitio o aplicación web. La ruta absoluta absoluta sería:
Debian:
/etc/apache2/sites-available/misitioweb.conf
Contenido
La sintaxis del archivo de configuración es propia de Apache, en el archivo se hace el llamado de los módulos y directrices que incidirán sobre el sitio web y su seguridad.
Ejemplo de contenido de un archivo de configuración:
<VirtualHost *:80>
ServerName misitioweb.com
ServerAlias www.misitioweb.com
ServerAlias misitioweb.es
ServerAdmin webmaster@nuxpy.com
DocumentRoot /var/www/html/misitioweb
ErrorLog ${APACHE_LOG_DIR}/error_misitioweb.log
CustomLog ${APACHE_LOG_DIR}/access_misitioweb.log combined
</VirtualHost>
En la línea 6 se declara la ruta absoluta donde está ubicado todo el árbol del sitio web, aunque este pueda llevar hacia otras rutas, allí se hace referencia a la raíz de la aplicación web.
Si se desea agregar más directrices o parámetros de configuración para el sitio en cuestión, se pueden revisar en el sitio oficial de Apache.
Contenido con HTTPS / SSL
Se puede agregar un bloque para hacer la redirección de navegación HTTP a través de puerto 80 hacia navegación HTTPS puerto 443 de la siguiente manera:
<VirtualHost *:80>
ServerName nuxpy.com
ServerAlias www.nuxpy.com
ServerAdmin furbina@nuxpy.com
DocumentRoot /var/www/html/nuxpy.com
ErrorLog ${APACHE_LOG_DIR}/nuxpy.com_error.log
CustomLog ${APACHE_LOG_DIR}/nuxpy.com_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName nuxpy.com
ServerAlias www.nuxpy.com
ServerAdmin webmaster@nuxpy.com
DocumentRoot /var/www/html/nuxpy.com
ErrorLog ${APACHE_LOG_DIR}/nuxpy.com_error.log
CustomLog ${APACHE_LOG_DIR}/nuxpy.com_access.log combined
</VirtualHost>
Finalmente se asociaría un certificado digital correspondiente, o vincular una estructura tal como se genera con el certbot de Let's Encrypt.
Activar un VirtualHost
Una vez que se genera un VirtualHost para un sitio definido, este se debe activar. En algunos sistemas Linux el servidor Apache contiene un pool de comandos para la gestión de sitios y módulos.
Para la activación sería algo parecido a lo siguiente:
a2ensite misitioweb.conf
Este comando genera un enlace simbólico que habilita el sitio web y se muestra en la ruta absoluta:
Debian:
/etc/apache2/sites-enabled/misitioweb.conf
Posteriormente se recarga el servicio de Apache, mediante systemd:
systemctl reload apache2.service
De manera tradicional:
/etc/init.d/apache2 reload
Desactivar un VirtualHost
Para desactivar un VirtualHost con los comandos de Apache:
a2dissite misitioweb.conf
Luego se recarga el servicio, con systemd:
systemctl reload apache2.service
De manera tradicional:
/etc/init.d/apache2 reload