- Veröffentlicht am
- • How2-Tipps
VirtualHosts verstehen und richtig einrichten (Apache)
- Autor
-
-
- Benutzer
- tmueller
- Beiträge dieses Autors
- Beiträge dieses Autors
-
Mehrere Websites mit nur einem Apache-Server betreiben – einfach erklärt
Wer mehrere Websites oder Projekte auf einem einzigen Server hosten möchte, kommt bei Apache am Begriff VirtualHost nicht vorbei. Diese Funktion ermöglicht es, mehrere Domains, Subdomains oder Projekte sauber voneinander zu trennen – auf derselben IP-Adresse und demselben Server.
In diesem Artikel lernst du, was VirtualHosts sind, wie man sie richtig konfiguriert, welche Typen es gibt und wie du Best Practices umsetzt, um deinen Server sauber, sicher und wartbar zu halten.
Was ist ein VirtualHost?
Ein VirtualHost ist eine logische Website-Konfiguration innerhalb des Apache-Webservers. Jeder VirtualHost beschreibt:
- welche Domain er bedienen soll (z. B.
example.com), - wo die Dateien liegen (z. B.
/var/www/example.com), - und welche Einstellungen für diese Domain gelten (z. B. Logs, SSL, Redirects usw.).
So kann ein einzelner Apache-Server mehrere Websites gleichzeitig ausliefern, ohne dass sie sich gegenseitig beeinflussen.
Arten von VirtualHosts
Es gibt zwei grundsätzliche Arten:
1. Name-based VirtualHosts
Mehrere Domains teilen sich eine IP-Adresse. Apache entscheidet anhand des Hostnamens (aus dem HTTP-Header), welche Website ausgeliefert wird. Das ist heute der Standardfall für fast alle Websites.
Beispiel:
www.beispiel1.dewww.beispiel2.de→ Beide liegen auf derselben IP-Adresse.
2. IP-based VirtualHosts
Jede Domain bekommt eine eigene IP-Adresse. Das wird heute kaum noch verwendet – meist nur für Sonderfälle (z. B. alte SSL-Konfigurationen oder dedizierte Dienste).
Apache VirtualHosts aktivieren (unter Debian/Ubuntu)
Apache ist für VirtualHosts bereits vorbereitet. Die Konfigurationen liegen hier:
/etc/apache2/sites-available/
/etc/apache2/sites-enabled/
Der Standard-VirtualHost sieht meist so aus:
/etc/apache2/sites-available/000-default.conf
Hier kannst du beliebig viele weitere .conf-Dateien anlegen – eine pro Domain oder Projekt.
Beispiel: Zwei Websites auf einem Server
Angenommen, du möchtest zwei Websites betreiben:
example1.comexample2.com
Dann legst du zwei Verzeichnisse an:
sudo mkdir -p /var/www/example1.com/public_html
sudo mkdir -p /var/www/example2.com/public_html
Und vergib die richtigen Berechtigungen:
sudo chown -R www-data:www-data /var/www/example1.com /var/www/example2.com
VirtualHost für example1.com
Datei: /etc/apache2/sites-available/example1.com.conf
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example1_error.log
CustomLog ${APACHE_LOG_DIR}/example1_access.log combined
</VirtualHost>
VirtualHost für example2.com
Datei: /etc/apache2/sites-available/example2.com.conf
<VirtualHost *:80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example2_error.log
CustomLog ${APACHE_LOG_DIR}/example2_access.log combined
</VirtualHost>
Aktivieren der VirtualHosts
Aktiviere jede Website mit:
sudo a2ensite example1.com.conf
sudo a2ensite example2.com.conf
Anschließend Apache neu laden:
sudo systemctl reload apache2
Jetzt kannst du beide Domains im Browser aufrufen – Apache liefert automatisch die passende Seite.
HTTPS (SSL) für jeden VirtualHost aktivieren
Sobald du HTTPS mit Let’s Encrypt einrichtest, erstellt Certbot automatisch eigene SSL-VirtualHosts: Dateien liegen dann z. B. unter:
/etc/apache2/sites-available/example1.com-le-ssl.conf
Darin steht:
<VirtualHost *:443>
ServerName example1.com
DocumentRoot /var/www/example1.com/public_html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example1.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example1.com/privkey.pem
</VirtualHost>
So kann jede Domain ihr eigenes Zertifikat nutzen.
Best Practices für saubere VirtualHosts
| Thema | Empfehlung |
|---|---|
| Struktur | Pro Domain ein eigenes Verzeichnis unter /var/www/<domain>/public_html |
| Logs | Eigene Logfiles für jede Domain (Error + Access) |
| Sicherheit | Keine Schreibrechte für andere Benutzer, korrekte Rechte (www-data) |
| SSL | Immer HTTPS aktivieren (Let’s Encrypt) |
| Redirects | HTTP → HTTPS und www → non-www (oder umgekehrt) |
| Performance | Cache-Header setzen (mod_expires, mod_deflate) |
| Konvention | Einheitliche Namensgebung der Config-Dateien (domain.tld.conf) |
Optional: Standard-VirtualHost ändern
Wenn eine Anfrage keine passende Domain findet, liefert Apache den ersten VirtualHost aus, meist 000-default.conf.
Tipp: Erstelle eine eigene „Fallback-Seite“ oder „Maintenance-Seite“ dafür, z. B.:
<VirtualHost *:80>
ServerName _
DocumentRoot /var/www/default
</VirtualHost>
Mit VirtualHosts kannst du aus einem einzigen Apache-Server ein ganzes Hosting-System machen – sauber getrennt, sicher und flexibel. Ob für kleine Projekte oder große Multi-Domain-Systeme: Einmal verstanden, sind VirtualHosts das Rückgrat jeder professionellen Apache-Konfiguration.
Ein Server, viele Websites – ganz einfach.