mod_macro ist dufte, besonders wenn man nicht nur Apache Vhosts für 10-20 Leute verwaltet. Da gibt es etliche sinnvolle Einsätze für.
Das Modul mod_macro ist default bei apache 2.4 dabei.
$a2enmod macro
Nun kann man sich eine einfache macro.conf anlegen:
<Macro VHost $name $domain>
<VirtualHost *:80>
ServerName $domain
ServerAlias www.$domain
DocumentRoot "/var/www/vhosts/$name"
ErrorLog "/var/log/httpd/$name.error_log"
CustomLog "/var/log/httpd/$name.access_log" combined
</VirtualHost>
</Macro>
Wir haben damit ein Macro namens VHost angelegt. Dieses Macro kann mit folgenden Werten gefüttert werden:
$name $domain
Wollen wir das Nacro nun in unserer vhost.conf nutzen, schreiben wir dort einfach nur:
Use VHost example example.com
...
Use VHost montag baldistfruehling.org
Wir übergeben also den Wert example und example.com an das Macro mit dem Namen VHost. Dabei ist die Reihenfolge der Werte durch das Macro vorgegeben. Der Apache baut uns damit unsere Vhost.conf zusammen.
Fertig sind unsere Vhosts. Einfach den Apache neu starten und das war es. In der Dokumentation wird aus verständlichen Gründen noch vorgeschlagen die Macro Definition wieder zu entfernen wenn sie nicht mehr gebraucht wird.
Dies geschieht einfach mit
UndefMacro VHost
Besonders bei größere Konfigurationen, vermeidet man damit Konflikte.
Will man mehrere Werte übergeben z. B. IP Listen, kann man einfach diese einfach in Anführungszeichen setzen.
Use RestrictedAccessPolicy "192.54.172.0/24 192.54.148.0/24"
Hinweise:
Die macro.conf kann natürlich in beliebig viele Dateien auf gesplittet werden. Optimalerweise sollten die Namen der Macro Dateien Aufschluss über deren Funktion geben. Das Include der macro.conf muss vor dem Include der vhost.conf stehen.
Eine Dokumentation zu mod_macro findet man unter
https://httpd.apache.org/docs/2.4/mod/mod_macro.html
Die ist sehr gut, daher habe ich auch auf eigene Beispiele verzichtet.