open-how2 – Entdecke. Verstehe. Nutze.
Veröffentlicht am
How2-Tipps

VirtualHosts verstehen und richtig einrichten (Apache)

Autor
VirtualHosts verstehen und richtig einrichten (Apache)

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.de
  • www.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.com
  • example2.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.