Apache Virtual Hosts con mod_macro

Escrito el 2022-10-08 por Alberto Ferrer
Tiempo de lectura: 2 minuto(s)
Etiquetas: apache mod_macro

Esta semana estuvo entretenida, una de mis búsquedas estuvo referida a la optimización de Virtual Hosts en Apache (1000+). La idea es no repetir código, que se pueda leer, que al buscar un Virtual Host este este presente mediante la ejecución de httpd -S.

Y entre todas mis lecturas me encontré con este modulo. Básicamente, mod_macro nos permite: Proporciona macros dentro de los archivos de configuración de tiempo de ejecución de Apache httpd, para facilitar el proceso de creación de numerosos bloques de configuración similares. Cuando se inicia el servidor, las macros se expanden utilizando los parámetros proporcionados y el resultado se procesa junto con el resto del archivo de configuración.

Virtual Hosting con mod_macro

Lo primero que haremos sera crear un modelo el cual definiremos de la siguiente forma:

    <Macro VirtualHost_WithoutSSL $doc_root $domain>
    <VirtualHost *:80>
        ServerName $domain
        ServerAlias www.$domain

        DocumentRoot "/var/www/vhosts/$domain/$doc_root"
        ErrorLog "/var/log/httpd/$domain.error_log"
        CustomLog "/var/log/httpd/$domain.access_log" combined
    </VirtualHost>
    </Macro>

Para utilizarlo lo invocamos mediante:

    Use VirtualHost_WithoutSSL httpdocs example.com
    Use VirtualHost_WithoutSSL httpdocs hostname.org
    Use VirtualHost_WithoutSSL  httpdocs  apache.org
    UndefMacro VirtualHost_WithoutSSL 

Como se imaginaran las posibilidades son infinitas, de esta misma forma podemos por ejemplo, generar macros para PHP-FPM y configurar el parámetro Directory agregando algo como:

    <Macro VirtualHost_WithoutSSL $doc_root $domain>
    <VirtualHost *:80>
        ServerName $domain
        ServerAlias www.$domain

        DocumentRoot "/var/www/vhosts/$domain/$doc_root"
        ErrorLog "/var/log/httpd/$domain.error_log"
        CustomLog "/var/log/httpd/$domain.access_log" combined

       <Directory "/var/www/vhosts/$domain/$doc_root">
          Options +SymLinksIfOwnerMatch
          AllowOverride All
          Require all granted
       </Directory>

        <FilesMatch .php$>
              SetHandler "proxy:unix:/var/run/php/$domain.sock|fcgi://localhost/"
        </FilesMatch>
    </VirtualHost>
    </Macro>