Apache 2 : mod_macro
Il y a des logiciels, des outils, des modules ou on sait directement que l’on ne pourra plus s’en passer. Soit parce que c’est génial et révolutionnaire soit par ce que c’est très pratique et qu’il fallait y penser. C’est exactement ce que je me suis dis en découvrant le mod_macro pour Apache 2. Il y a quelques semaines je ne soupçonnais par l’existence d’un tel module. On m’en a parlé, j’ai laissé mariner et puis j’ai finalement mis la main à la pâte. Et là j’en ai eu la larme à l’œil. Combien de fois je me suis arraché les cheveux sur ma configuration de Apache, combien de copier/coller de virtual hosts j’ai fait… Avec mod_macro tout ça c’est terminé.
Pour résumer, ce module 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
Ensuite, il s’agit de ne pas faire n’importe quoi. Afin de gérer mes macros, j’ai créé un fichier macro.conf dans le répertoire /etc/apache2/conf.d/ qui est chargé au démarrage de Apache. Comme je l’ai dit précédemment, on peut se servir des macros pour faire énormément de choses donc je n’aborderai pas tout ici.
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. Imaginez s’il y en avait 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>
Vous voyez le principe. 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. En tout cas je ne me séparerai plus du mod_macro que je trouve vraiment intéressant pour gérer les hôtes virtuels (chose que je trouve très ennuyante).