Apache VirtualHost Log-Script

Dynamische Vhost-Konfiguration unter Apache

Wer vie­le vir­tu­el­le Hosts unter Apa­che zu ver­wal­ten oder zu erstel­len hat, kennt das Pro­blem: Bei der Kon­fi­gu­ra­ti­on müs­sen immer die sel­ben Anga­ben ein­ge­tra­gen wer­den. Bei­spiels­wei­se das Docu­men­tRoot und der Name der Log­da­tei­en für die jewei­li­ge Domain. Natür­lich kann man  die Vhost-Kon­fi­gu­ra­ti­ons­da­tei­en mit einem Script erzeu­gen, es ist aber auch mög­lich Varia­blen zu ver­wen­den und sich damit die Tipp­ar­beit zu erleich­tern.


Mit der Ver­wen­dung von Vir­tu­al­Do­cu­men­tRoot und Vir­tu­al­Scrip­tA­li­as las­sen sich Tei­le des Domain-Namens in einer Apa­che-Kon­fi­gu­ra­ti­ons­da­tei ver­wen­den. Eine der­ar­ti­ge Datei könn­te bei­spiels­wei­se so aus­se­hen:

<VirtualHost *>
UseCanonicalName Off
ServerName meinedomain.de
ServerAlias *.meinedomain.de
VirtualDocumentRoot /var/www/%-2.0.%-1
VirtualScriptAlias /var/www/%-2.0.%-1/cgi-bin
DirectoryIndex index.htm index.html index.shtml start.htm start.html start.shtml index.php index.php3 index.php4
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_common
CustomLog "|/usr/local/bin/apache_vhost_logger.pl" vhost_common
</VirtualHost>

Die­se Kon­fi­gu­ra­ti­on ist zustän­dig für meindomain.de und alle Sub­do­mains, wie www.meinedomain.de. Ser­ver­Na­me und Ser­ve­r­A­li­as sind wie gewohnt ein­zu­tra­gen.

Vir­tu­al­Do­cu­men­tRoot und Vir­tu­al­Scrip­tA­li­as ent­hal­ten Varia­blen, die einen Teil­string von meinedomain.de ent­hal­ten. „%-2.0.%-1“ ist in die­sem Bei­spiel der letz­te und vor­letz­te Teil des Domai­na­mens. Vir­tu­al­Do­cu­men­tRoot zeigt also auf das Ver­zeich­nis /var/www/meinedomain.de.

Etwas schwie­ri­ger ist es, eine eige­ne Log­da­tei für den vir­tu­el­len Host anzu­le­gen. Cus­tom­Log erlaubt kei­ne Varia­blen. Hier kann man aber ein Perl-Script (apche_vhost_logger.pl) ein­set­zen, das den Namen des vir­tu­el­len Host aus­liest und eine Log­da­tei dafür erstellt:

#!/usr/bin/perl
use IO::Handle;
$TARGET_DIR ="/var/log/apache2";
while ($log_line=<STDIN>) {
 ($vhost,$userhost,$remain) = split(/\s+/,$log_line,3);
 $vhost = "unknown" if (not $vhost);
 $target = $TARGET_DIR."/".$vhost.".log";
 open (my ($fh),">>$target");
 $fh->autoflush(1);
 print $fh "$userhost $remain\n";
}
exit 0;

Hin­ter Log­For­mat ist mit „%v“ der Beginn der Log­zei­le bestimmt. Die Varia­ble ent­hält den Namen des vir­tu­el­len Hosts. Das Script zer­legt die Log­zei­le in drei Tei­le $vhost, $user­host und $remain. Aus $vhost wird der Datei­na­me gebil­det, $user­host und $remain wer­den in das Log­file geschrie­ben. Wer will, kann $user­host (die IP-Num­mer des Web­sei­ten-Besu­chers) noch bear­bei­ten und bei­spiels­wei­se die IP-Adres­sen anony­mi­sie­ren.

Bit­te beach­ten Sie: Das Perl-Script wird von Apa­che für jeden Vhost gela­den und offen gehal­ten. Wenn Sie am Script etwas ändern, wird die Ände­rung erst nach „/etc/init.d/apache2 rel­oad“ wirk­sam.

Die hier vor­ge­stell­te Lösung hat eine klei­ne Schwä­che: Wenn Sie für einen Vhost eine spe­zi­el­le <Directory>-Direktive benö­ti­gen, müs­sen Sie hier wie­der den Namen des Ver­zeich­nis­ses (/var/www/meinedomain,.de) ein­tra­gen. Die Ver­wen­dung von Varia­blen ist hier nicht mög­lich.

Quellen

Apa­che Modu­le mod_vhost_alias

[amazon_auto_links id="323980"]


Schlagwörter:


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Partner-Links

[amazon_auto_links id="323997"]

Neueste Kommentare

  1. Die digitale Abhängigkeit von Geräten wie dem Smartphone ist nicht mehr von der Hand zu weisen. Man soll am besten…

  2. Vielen herzlichen Dank für die Anleitung. Sie war äußerst hilfreich bei der Einrichtung meiner Fritzbox. Ich kann sie nur bestens…


Die Website durchsuchen