Strukturierte Apache Vhost-Konfiguration mit mod_macro

Bei einer Menge gleichartiger Auftritte stellt sich die Frage, wie man die Konfiguration sinnvoll strukturiert. Eine Möglichkeit ist es, mit einem Template anzufangen und dann jeweils einen Platzhalter mit seinem Lieblingseditor auszutauschen. Gleichartige Teile kann man in eine eigene Datei packen und dann mittels der Include-Direktive einbinden. Für eine typische PHP-Anwendung sieht das im Extremfall so aus:

<VirtualHost *:443>
 ServerName example.com
 ServerAlias www.example.com
 DocumentRoot /var/www/example.com
 
 Include conf.d/basic_rewrites

 <Directory /var/www/example.com>
  Include conf.d/options_and_overrides
 </Directory>

 Include conf.d/php_values

 Include conf.d/ssl_options
 SSLCertificateFile /etc/ssl/certs/example.com.crt
 SSLCertificateKeyFile /etc/ssl/private/example.com.key
</VirtualHost>

Hier ist dann Disziplin erforderlich, damit weitere Änderungen dann in der richtigen Datei gemacht werden und (wieder-)gefunden werden. Besser kann es sein, alles in eine Datei zu schreiben und die Platzhalter zur Laufzeit durch mod_macro ersetzen zu lassen. Das obere Beispiel sieht dann so aus:

<Macro PHP_Webapp_SSL $domain>
 <VirtualHost *:443>
  ServerName $domain
  ServerAlias www.$domain
  DocumentRoot /var/www/vhosts/$domain

  RewriteCond %{HTTP_HOST} ^www\.$domain
  RewriteRule ^/(.*) https://$domain/$1 [R=301,L]

  <Directory /var/www/$domain>
   Options FollowSymLinks
   AllowOverride All
  </Directory>

  php_admin_value max_memory 256M
  php_admin_value max_execution_time 60
  php_admin_flag expose_php Off
  php_admin_flag display_errors Off

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  SSLHonorCipherOrder On
  SSLCertificateFile /etc/ssl/certs/$domain.crt
  SSLCertificateKeyFile /etc/ssl/private/$domain.key
 </VirtualHost>
</Macro>

Die gesamte Konfiguration ist damit übersichtlich in einer Datei abgebildet! Um das Makro dann zu expandieren, wird die Use-Direktive verwendet. Idealerweise ergänzt man die Datei einfach:

Use PHP_Webapp_SSL example.com 
UndefMacro PHP_WebApp_SSL

Das abschließende undefinieren mit UndefMacro verhindert dass man das Makro (unabsichtlich) noch an anderer Stelle verwenden kann. Zum aktivieren von neuen Vhosts ist natürlich dann noch ein Reload des Apache nötig.

Wer andere Ideen oder Erfahrungen aus der Praxis hat, kann diese gerne in den Kommentaren hinterlassen oder auch direkt per Kontaktformular oder E-Mail.

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*