logrotate Konfiguration Apache2

Diese Konfiguration nutze ich für Apache2 VirtualHosts. Dabei liegen die von Apache angelegten Logfiles unter „/var/log/apache2/<vhostName>/“. Die Konfiguration des Speicherortes passiert in der VirtualHost-Konfiguration.

/var/log/apache2/<vhostName>/*.log {
       weekly
       missingok
       rotate 52
       compress
       dateext
       notifempty
       create 640 root adm
       olddir /var/log/apache2/<vhostName>/old/
}

Die Konfiguration sollte vor dem ersten Einsatz getestet werden:

logrotate -d /etc/logrotate.d/<ConfigDatei>

Dabei kommt dann in etwa so etwas heraus:

reading config file /etc/logrotate.d/<ConfigDatei>
reading config info for /var/log/apache2/<vhostName>/*.log
olddir is now /var/log/apache2/<vhostName>/old/

Handling 1 logs

rotating pattern: /var/log/apache2/<vhostName>/*.log  weekly (52 rotations)
olddir is /var/log/apache2/<vhostName>/old/, empty log files are not rotated, old logs are removed
considering log /var/log/apache2/<vhostName>/access.log
  log does not need rotating
considering log /var/log/apache2/<vhostName>/error.log
  log does not need rotating

Konfiguration Apache Webserver

Mit dem Apache2 habe ich bisher mehrere Webserver aufgebaut. Dabei versuche ich unter Debian immer folgenden Aufbau zu nutzen.

VirtualHost-Konfigurationen

/etc/apache/sites-available/<vhostName>

So kann man diese einfach per „a2ensite“ und „a2dissite“ aktivieren und deaktivieren.

<VirtualHost *:80>
       ServerAdmin webmaster@example.com
       ServerName sub.domain.tld
       
       DocumentRoot /srv/www/vhosts/<vhostName>/htdocs/
       
       ErrorLog /var/log/apache2/<vhostName>/error.log
       LogLevel warn
       CustomLog /var/log/apache2/<vhostName>/access.log combined
       
       ErrorDocument 404 /error/404.html
       ErrorDocument 403 /error/403.html
       ErrorDocument 401 /error/401.html
       
       <Directory /srv/www/vhosts/<vhostName>/htdocs/>
               Options -Indexes FollowSymLinks
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>
       
       Alias /error /srv/www/vhosts/<vhostName>/ErrorDocuments
       <Directory /srv/www/vhosts/<vhostName>/ErrorDocuments/>
               Options None
               AllowOverride None
               Order allow,deny
               allow from all
       </Directory>
       
</VirtualHost>

Virtual Host Container

Ich nutze einen separaten Ordner als Container für alle Dateien, die diese Webseite betreffen …

/srv/www/vhosts/<vhostName>
/srv/www/vhosts/<vhostName>

… mit folgender Unterstruktur

drwxr-xr-x   2  root            root           4,0K 30. Apr 15:51 config
drwxr-xr-x   2  root            root           4,0K 30. Apr 15:51 ErrorDocuments
drwxr-xr-x   2  root            root           4,0K 30. Apr 15:51 htaccess
drwxr-xr-x   15 www-data        www-data       4,0K  2. Mai 12:27 htdocs

Der Ordner ErrorDocuments kann eigene Fehlerseiten enthalten, die so auch bei geschütztem Hauptbereich durch einen Alias getrennt freigegeben werden können (s.o.). Der Ordner htaccess enthält evtl. vorhandene Zutritts- oder Umschreibungsdateien, die so wieder separat vom Hauptbereich geschützt werden können. Der Ordner htdocs enthält den DocumentRoot des Virtual Hosts. Der Ordner config enthält zwei Dateien. Einmal lr-<vhostname> mit einer Konfiguration für den logrotate-Dienst und braucht so nur in das Verzeichnis /etc/logrotate.d/verlinkt werden. Und zum zweiten die Apache-Konfiguration a2-<vhostname>. So kann auch diese Datei einfach in das Verzeichnis/etc/apache2/sites-available verlinkt werden.

Log-Dateien

Die Logdateien sollten abhängig vom Betriebssystem in der dafür vorgesehenen Partion abgelegt werden. Durch diese Abtrennung kann verhindert werden, dass eine vollgelaufene Log-Partition das gesamte System zum Absturz bringt. Bei Debian lege ich die Webserver-Logs wie folgt ab:

/var/log/apache/<vhostName>
/var/log/apache/<vhostName>/old

Backup der vHosts

Backups sollten auf jeden Fall automatisch laufen, da einem sonst gerade die Daten fehlen, die man gerade benötigt.

Für die einzelnen vHost des Apache realisiere ich das per Script, das mir die gepackten Archive unter

/var/backups/www

ablegt. Es werden dabei automatisch für jeden einzelnen vHost-Ordner ein Backup-Ordner angelegt und dort jeweils in tägliches und wöchentliches Backup unterschieden. Da ich die wöchentlichen Backups aufhebe, verzichte auf monatliche Backups.

#!/bin/sh
# Angaben zu Quelle und Ziel
src=/srv/www/vhosts
dest=/var/backups/www
# Unterordner mit Archivnamen im Zielverz. erzeugen (0/1)?
sd=1
### Hilfsvariablen ###
# Wochentag
wd=$(date +"%w")
# Kalenderwoche
kw=$(date +"%W")
# Monat
mo=$(date +"%m")
# Jahr
year=$(date +"%Y")
# Datum
d=$(date +"%Y%m%d")
 
# Pruefen, ob Quellverzeichnis vorhanden ist...
if [ ! -e $src ]; then
  /bin/echo "Quellverzeichnis $src nicht vorhanden oder kein Zugriff"
  exit 0
fi
 
# Pruefen, ob Zielverzeichnis vorhanden ist...
# ... und wenn nicht, anlegen
if [ ! -e $dest ]; then /bin/mkdir -p $dest; fi
 
# Ins Quellverzeichnis wechseln, damit tar keine
# fuehrenden / entfernen muss...
# ... und dadurch keine Ausgaben bei Cron-Jobs entstehen
cd $src
 
# Alle vHost-Ordner einzeln packen
for i in $(/bin/ls); do
  # Alte Datei loeschen
  if [ -e $dest/$wd-$i*.tar.gz ]; then /bin/rm $dest/$wd-$i*.tar.gz; fi
  if [ -e $dest/$i/taeglich/$wd-$i*.tar.gz ]; then /bin/rm $dest/$i/taeglich/$wd-$i*.tar.gz; fi
  # Neue Datei erstellen
  if [ $sd == 1 ]; then
    if [ ! -e $dest/$i/taeglich ]; then /bin/mkdir -p $dest/$i/taeglich; fi
    /bin/tar -czf "$dest/$i/taeglich/$wd-$i-$d.tar.gz" $i
  else
    /bin/tar -czf "$dest/$wd-$i-$d.tar.gz" $i
  fi
  # Wochen-Datei kopieren
  if [ $wd == 1 ]; then
    if [ ! -e $dest/$i/woechentlich ]; then /bin/mkdir -p $dest/$i/woechentlich; fi
     /bin/cp "$dest/$i/taeglich/$wd-$i-$d.tar.gz" "$dest/$i/woechentlich/$year-$kw-$i-$d.tar.gz"
  fi
done

Absicherung des Apache-Servers

Ein Apache Webserver ist sehr gut für die Entwicklung geeignet, weil er viele Informationen ausgeben, die eine Fehlerbehebung und Entwicklung unterstützen. Diese Informationen sollten auf Produktivsystem aber nicht für die Öffentlichkeit verfügbar sein. Daher sollte man noch ein paar Sicherheits-Einstellungen für den Webserver vornehmen.

Single Sign On und Kerberos auf Debian

Wer jetzt noch seinen Apache Webserver auf Debian im Windows-Intranet mit SSO zu einem 2008 R2 AD Domain-Controller einrichten will, findet bei Stefan Macke den Beitrag „Single Sign On with Kerberos using Debian and Windows Server 2008 R2