In diesem Artikel geht es um die VirtualHost-Konfiguration vom Apache-Server auf einem Linux-System (Debian) und wie man mit VirtualHosts arbeitet, d.h. wie man sie (richtig) aktiviert und deaktiviert, und was man dabei beachten muss.
Der Apache-Server hat eine einheitliche Verzeichnisstruktur, an die man sich bei der VirtualHost-Konfiguration halten sollte. Einzelne VirtualHost-Konfigurationen befinden sich im Verzeichnis /etc/apache2/sites-available/
.
Hier ist es empfehlenswert, für jeden VirtualHost eine eigene Datei anzulegen und den Hostnamen als Dateinamen zu verwenden, damit man mit den vom Apache-Paket mitgelieferten Perl-Skripten a2ensite
und a2dissite
ganz leicht einzelne VirtualHosts aktivieren und deaktivieren kann. Außerdem empfiehlt es sich auch in /var/www/
für jedes VirtualHost-Verzeichnis den Dateinamen der VirtualHost-Konfigurationsdatei zu verwenden.
Beispiel
-
VirtualHost-Konfigurationsdatei:
/etc/apache2/sites-available/sub.example.org.conf
-
VirtualHost-DocumentRoot:
/var/www/sub.example.org/
Neue VirtualHosts zum Apache-Server hinzufügen
Um einen neuen VirtualHost hinzuzufügen, erstellen wir mit Root-Rechten eine Datei im Verzeichnis /etc/apache2/sites-available/
und nennen sie beispielsweise sub.example.org.conf
. In diese Datei fügen wir nun zwei <VirtualHost>
-Sektionen ein: einen für normale Verbindungen über den Hostnamen auf Port 80 (HTTP) und einen optional für Port 443 (HTTPS). Bei der VirtualHost-Konfiguration für HTTPS ist der einzige Unterschied, dass mit IfModule
überprüft wird, ob das SSL-Modul aktiviert ist und dass die Pfade zum TLS-Zertifikat, dem privaten Schlüssel und gegebenenfalls dem Intermediate-Serverzertifikat der entsprechenden Zertifizierungsstelle angegeben sind.
Beispiel: VirtualHost-Konfiguration für sub.example.org auf Port 80
<VirtualHost *:80>
ServerName sub.example.org
DocumentRoot "/var/www/sub.example.org/"
<Directory /var/www/sub.example.org/>
Options -Indexes
</Directory>
</VirtualHost>
Beispiel: VirtualHost-Konfiguration für sub.example.org Port 443
<VirtualHost *:443>
<IfModule mod_ssl.c>
ServerName sub.example.org
DocumentRoot "/var/www/sub.example.org/"
SSLEngine on
SSLCertificateFile /etc/apache2/certificates/sub.example.org/certificate.pem
SSLCertificateKeyFile /etc/apache2/certificates/sub.example.org/private.pem
SSLCertificateChainFile /etc/apache2/certificates/YOUR_CA/intermediate.pem
<Directory /var/www/sub.example.org/>
Options -Indexes
</Directory>
</IfModule>
</VirtualHost>
Einzelne VirtualHosts mit a2ensite
und a2dissite
aktivieren und deaktivieren
Die VirtualHost-Konfiguration für die Subdomain sub.example.org
ist nun erfolgreich erstellt und muss noch in die Apache-Konfiguration eingebunden werden. Dazu muss man mit Root-Rechten a2ensite sub.example.org.conf
ausführen und danach die Apache-Konfiguration mit service apache2 reload
neu laden. Wer bereits die Verzeichnisstruktur von /etc/apache2/
unter die Lupe genommen hat, dem wird aufgefallen sein, dass noch ein weiteres Verzeichnis mit dem Namen sites-enabled
existiert. Der Apache bindet in seiner Hauptkonfigurationsdatei /etc/apache2/apache2.conf
nämlich alle Dateien aus diesem Verzeichnis ein.
Dieses Verzeichnis enthält nur Symlinks auf die VirtualHost-Konfigurationsdateien in /etc/apache2/sites-available/
. Genau das machen die beiden Perl-Skripte a2ensite
und a2dissite
. Sie erstellen einen Symlink auf den echten VirtualHost und aktivieren ihn damit oder sie entfernen den SymLink wieder und deaktivieren ihn damit.
Nachtrag bzgl. systemd
Auf systemd-basierenden Linux-Distributionen kann (bzw. sollte) der Befehl service apache2 reload
durch systemctl reload apache2
ersetzt werden, da hier systemd die zentrale Stelle ist, um Dienste zu steuern.