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„