Apache Virtual Hosts con 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>