Apache 2 mod_macro
Le module macro permet de factoriser sa configuration de Apache. On définit des macros puis on les appelle un peu comme les fonctions avec un langage de scripts. On peut faire des macros pour plus ou moins tout ainsi en organisant bien son système et en sachant factoriser sa configuration correctement on peut grandement se simplifier la vie.
Pour installer le mod_macro sur Debian et dérivées, rien de plus simple :
aptitude install libapache2-mod-macro
a2enmod macro
Afin de gérer mes macros, on peut créer un fichier macro.conf dans le répertoire /etc/apache2/conf.d/ qui sera chargé au démarrage de Apache.
Admettons que nous disposons des 2 hôtes virtuels suivants (exemple bidon mais c’est pour montrer le principe) :
<VirtualHost [ipv6]:80 ipv4:80> DocumentRoot /var/www/toto ServerName toto.domaine.tld ServerAlias toto.domaine.tld ServerAdmin admin@toto.com ErrorLog /var/log/apache2/toto_error.log TransferLog /var/log/apache2/toto_access.log </VirtualHost> <VirtualHost [ipv6]:80 ipv4:80> DocumentRoot /var/www/titi ServerName titi.domaine.tld ServerAlias titi.domaine.tld ServerAdmin admin@titi.com ErrorLog /var/log/apache2/titi_error.log TransferLog /var/log/apache2/titi_access.log </VirtualHost>
Il y a quand même pas mal de points communs entre ces 2 hôtes virtuels. En imaginant qu'on en ait 20 comme ça, la configuration devient vite lourde à gérer. Avec une seule et unique macro on va bien se simplifier la vie. Dans le fichier /etc/apache2/conf.d/macro.conf on écrit donc la macro suivante :
<Macro Domain $sub $domain $root> DocumentRoot /var/www/$root ServerName $sub.$domain ServerAlias $sub.$domain ServerAdmin admin@$domain ErrorLog /var/log/apache2/$domain_error.log TransferLog /var/log/apache2/$domain_access.log </Macro>
On regroupe les éléments communs aux hôtes virtuels pour les mettre dans une macro qui s’appelle Domain et qui prend 3 paramètres sub, le sous-domaine à utiliser, domain, le domaine à utiliser, et root le répertoire où se trouve les fichiers à rendre disponible sur le web.
Le fichier contenant les virtual hosts peut alors se simplifier en :
<VirtualHost [ipv6]:80 ipv4:80> Use Domain toto domaine.tld rep_toto </VirtualHost> <VirtualHost [ipv6]:80 ipv4:80> Use Domain titi domaine.tld rep_titi </VirtualHost>
L’utilisation de la macro se fait avec la syntaxe très script-like Use NomMacro [paramètres]
. Il faut impérativement donner tous les paramètres à la macro sans quoi la vérification de la configuration échouera.
L’exemple d’utilisation donné ici est simple mais on peut faire des choses plus complexes en utilisant des macros dans d’autres macros, etc… Il faut juste trouver la configuration qui convient le mieux pour son serveur.