Sparen Sie 15% bei allen Hosting-Diensten

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code: Skills Anfangen
Abschnitte
Linux Verwaltung

Wie man Virtual Hosts in Nginx auf Ubuntu konfiguriert

Die Konfiguration von Virtual Hosts in Nginx ist eine der leistungsstärksten Techniken zum Hosten mehrerer Websites auf einem einzelnen Server, jeweils mit eigenem Domainnamen, Root-Verzeichnis und unabhängiger Konfiguration. Nginx handhabt dies durch Server Blocks — flexible, leichte Konfigurationseinheiten, die definieren, wie der Webserver auf Anfragen für jede Domain reagiert.

Egal ob Sie ein persönliches Portfolio verwalten, Client-Websites betreiben oder eine Multi-Tenant-Anwendung skalieren — dieser Leitfaden bietet eine vollständige, produktionsreife Anleitung zum Einrichten von Nginx Virtual Hosts auf Ubuntu. Wir behandeln Verzeichnisstruktur, Server-Block-Konfiguration, Aktivierung von Websites, SSL/HTTPS-Setup und Fehlerbehebung — alles, was Sie benötigen, um von Null zu einem vollständig funktionsfähigen Multi-Site-Nginx-Server zu gelangen.

> Suchen Sie nach einem zuverlässigen Ubuntu-Server zum Mitverfolgen? AlexHost’s VPS Hosting Pläne geben Ihnen vollständigen Root-Zugriff, SSD-Speicher und sofortige Bereitstellung — perfekt für genau diesen Anwendungsfall.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Bedingungen erfüllt sind:

Nginx auf Ihrem Server installiert

Wenn Nginx noch nicht installiert ist, führen Sie die folgenden Befehle auf Ihrem Ubuntu-Server aus:

sudo apt update
sudo apt install nginx

Überprüfen Sie die Installation und stellen Sie sicher, dass der Dienst ausgeführt wird:

sudo systemctl status nginx

Sie sollten active (running) in der Ausgabe sehen. Wenn nicht, starten Sie ihn manuell:

sudo systemctl start nginx
sudo systemctl enable nginx

Domainnamen, die auf Ihren Server verweisen

Jeder Virtual Host benötigt einen Domainnamen, der zu der öffentlichen IP-Adresse Ihres Servers aufgelöst wird. Sie müssen A-Einträge in Ihren DNS-Einstellungen erstellen, die auf die IP des Servers verweisen.

> Benötigen Sie eine Domain? Registrieren Sie Ihre Domain über AlexHost Domain Registration und verwalten Sie DNS-Einträge direkt von Ihrem Kontrollpanel aus.

Für lokale Testzwecke können Sie DNS vollständig umgehen, indem Sie Ihre /etc/hosts Datei bearbeiten (behandelt in Schritt 7).

Erforderliche Berechtigungen

Sie benötigen sudo Berechtigungen auf Ihrem Ubuntu-Server, um Verzeichnisse zu erstellen, Konfigurationsdateien zu bearbeiten und den Nginx-Dienst zu verwalten.

Schritt 1: Verzeichnisse für jede Website einrichten

Jede auf Ihrem Server gehostete Website sollte ihr eigenes isoliertes Verzeichnis zum Speichern von Webdateien haben. Diese Trennung hält Ihre Projekte organisiert und verhindert Konfigurationskonflikte.

In dieser Anleitung konfigurieren wir zwei Beispieldomänen: example1.com und example2.com. Ersetzen Sie diese überall durch Ihre tatsächlichen Domainnamen.

Erstellen Sie die Web-Root-Verzeichnisse

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

Das -p Flag erstellt alle erforderlichen Zwischenverzeichnisse.

Weisen Sie die richtige Berechtigung zu

Gewähren Sie Eigentum dieser Verzeichnisse an www-data, den Systembenutzer, unter dem Nginx läuft:

sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/html

Dies stellt sicher, dass Nginx die erforderlichen Leseberechtigungen hat, um Dateien aus diesen Verzeichnissen bereitzustellen.

Legen Sie Verzeichnisberechtigungen fest

sudo chmod -R 755 /var/www

Die 755 Berechtigung bedeutet, dass der Eigentümer vollständigen Lese-/Schreib-/Ausführungszugriff hat, während Gruppen und andere Benutzer Lese- und Ausführungszugriff haben – angemessen für öffentlich bereitgestellte Webinhalte.

Schritt 2: Beispiel-HTML-Inhalt erstellen

Um zu überprüfen, dass jeder Virtual Host korrekt funktioniert, erstellen Sie eine einfache index.html Datei für jede Website.

Für example1.com

echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.html

Für example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Diese Platzhalterseiten bestätigen, dass Nginx Anfragen zum korrekten Document Root für jede Domain leitet.

Schritt 3: Virtual-Host-Konfigurationsdateien erstellen

Nginx speichert Site-Konfigurationsdateien in /etc/nginx/sites-available/. Jede Datei definiert einen Server Block — das Nginx-Äquivalent eines Apache Virtual Host. Aktivierte Sites werden dann in /etc/nginx/sites-enabled/ symverlinkt.

Konfiguration für example1.com

Erstellen Sie eine neue Konfigurationsdatei:

sudo nano /etc/nginx/sites-available/example1.com

Fügen Sie den folgenden Server Block hinzu:

server {
    listen 80;
    listen [::]:80;

    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example1.com.access.log;
    error_log  /var/log/nginx/example1.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Speichern und schließen Sie die Datei (Ctrl+X, dann Y, dann Enter).

Konfiguration für example2.com

Erstellen Sie eine zweite Konfigurationsdatei:

sudo nano /etc/nginx/sites-available/example2.com

Fügen Sie den folgenden Server Block hinzu:

server {
    listen 80;
    listen [::]:80;

    server_name example2.com www.example2.com;

    root /var/www/example2.com/html;
    index index.html index.htm;

    access_log /var/log/nginx/example2.com.access.log;
    error_log  /var/log/nginx/example2.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Wichtige Direktiven erklärt

DirektiveZweck
listen 80Lauscht auf eingehende HTTP-Verbindungen auf Port 80
listen [::]:80Aktiviert IPv6-Unterstützung auf Port 80
server_nameDefiniert, welche Domainnamen dieser Block verarbeitet
rootLegt das Document Root fest — wo Website-Dateien gespeichert sind
indexGibt die Standarddatei an, die bereitgestellt wird, wenn ein Verzeichnis angefordert wird
try_filesVersucht, die angeforderte Datei bereitzustellen; gibt 404 zurück, wenn nicht gefunden
access_log / error_logSeparate Protokolldateien pro Site für einfacheres Debugging

Schritt 4: Aktivieren Sie die Virtual Hosts

Nginx aktiviert Websites durch das Erstellen von symbolischen Links von sites-available zu sites-enabled. Dieses Design ermöglicht es Ihnen, Konfigurationen vorzubereiten, ohne sie sofort zu aktivieren.

sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/

Entfernen Sie die Standard-Website (Optional, aber empfohlen)

Wenn Sie verhindern möchten, dass Nginxs Standard-Platzhalterseite Probleme verursacht, deaktivieren Sie sie:

sudo rm /etc/nginx/sites-enabled/default

Sie können sie später jederzeit wieder aktivieren, indem Sie den symbolischen Link neu erstellen.

Schritt 5: Nginx-Konfiguration testen

Validieren Sie vor dem Neustart von Nginx immer Ihre Konfigurationsdateien auf Syntaxfehler. Eine falsch konfigurierte Datei kann alle Websites auf dem Server lahmlegen.

sudo nginx -t

Ein erfolgreicher Test gibt Folgendes zurück:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Wenn Fehler angezeigt werden, gibt Nginx die Datei und Zeilennummer an, in der das Problem aufgetreten ist. Überprüfen Sie die relevante Konfigurationsdatei und korrigieren Sie alle Tippfehler oder fehlenden Semikola, bevor Sie fortfahren.

Schritt 6: Nginx neu starten, um Änderungen anzuwenden

Sobald der Konfigurationstest erfolgreich ist, laden Sie Nginx neu oder starten Sie es neu, um Ihre Änderungen anzuwenden:

sudo systemctl restart nginx

Alternativ können Sie reload für einen ordnungsgemäßen Neustart verwenden, der aktive Verbindungen nicht unterbricht:

sudo systemctl reload nginx

Schritt 7: Zugriff auf Ihre Websites

Wenn DNS bereits konfiguriert ist

Wenn Ihre Domainnamen bereits über DNS A-Einträge auf die IP-Adresse Ihres Servers verweisen, öffnen Sie einfach einen Browser und navigieren Sie zu:

  • http://example1.com
  • http://example2.com

Sie sollten die jeweiligen "Willkommen"-Meldungen sehen, die Sie in Schritt 2 erstellt haben.

Für lokale Tests (ohne DNS)

Wenn Sie lokal testen oder DNS noch nicht propagiert wurde, können Sie die Domänenauflösung simulieren, indem Sie die /etc/hosts-Datei auf Ihrem lokalen Computer (auf Linux/macOS) oder C:WindowsSystem32driversetchosts (auf Windows) bearbeiten.

Öffnen Sie die Datei mit erhöhten Berechtigungen:

sudo nano /etc/hosts

Fügen Sie die folgenden Zeilen hinzu und ersetzen Sie YOUR_SERVER_IP durch Ihre tatsächliche Server-IP:

YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.com

Speichern Sie die Datei und testen Sie in Ihrem Browser. Denken Sie daran, diese Einträge zu entfernen, sobald Ihre echten DNS-Einträge live sind.

Schritt 8: HTTPS mit Let’s Encrypt aktivieren (empfohlen)

Die Ausführung von Websites über einfaches HTTP ist in Produktionsumgebungen nicht mehr akzeptabel. HTTPS verschlüsselt den Datenverkehr zwischen Ihrem Server und Besuchern, verbessert die SEO-Rankings und ist für moderne Browser-Funktionen erforderlich. Let’s Encrypt bietet kostenlose, automatisch erneuerbare SSL/TLS-Zertifikate.

> Bevorzugen Sie eine Premium-SSL-Lösung? AlexHost bietet vertrauenswürdige SSL Certificates für Unternehmen, die erweiterte Validierung oder Wildcard-Abdeckung benötigen.

Certbot installieren

sudo apt install certbot python3-certbot-nginx

SSL-Zertifikate abrufen und installieren

Führen Sie Certbot für jede Domain aus. Das --nginx Plugin modifiziert automatisch Ihre Nginx-Konfiguration, um HTTPS zu aktivieren:

sudo certbot --nginx -d example1.com -d www.example1.com
sudo certbot --nginx -d example2.com -d www.example2.com

Folgen Sie den interaktiven Eingabeaufforderungen. Certbot wird:

  1. Domänenbesitz über HTTP-Challenge verifizieren
  2. Ein signiertes Zertifikat von Let’s Encrypt abrufen
  3. Ihren Nginx-Serverblock automatisch aktualisieren, um auf Port 443 zu lauschen
  4. HTTP-zu-HTTPS-Umleitung konfigurieren

Automatische Erneuerung überprüfen

Let’s Encrypt-Zertifikate verfallen alle 90 Tage. Certbot installiert einen systemd-Timer, um Erneuerungen automatisch zu verarbeiten. Testen Sie dies mit:

sudo certbot renew --dry-run

Wenn der Testlauf ohne Fehler abgeschlossen wird, werden Ihre Zertifikate automatisch ohne manuelle Intervention erneuert.

So sieht Ihr aktualisierter Serverblock aus

Nach der Ausführung von Certbot wird Ihre Konfiguration automatisch auf etwa folgende Weise aktualisiert:

server {
    listen 443 ssl;
    server_name example1.com www.example1.com;

    root /var/www/example1.com/html;
    index index.html;

    ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name example1.com www.example1.com;
    return 301 https://$host$request_uri;
}

Fehlerbehebung bei häufigen Problemen

Auch bei sorgfältiger Konfiguration können Probleme auftreten. Hier sind die häufigsten Probleme und deren Lösungen:

502 Bad Gateway

Dies bedeutet normalerweise, dass Nginx nicht mit einem Backend-Service (z. B. PHP-FPM oder einer Node.js-App) kommunizieren kann. Überprüfen Sie, ob der Upstream-Service ausgeführt wird und dass der Socket/Port in Ihrer Konfiguration korrekt ist.

403 Forbidden

Normalerweise ein Berechtigungsproblem. Überprüfen Sie, dass www-data das Web-Root-Verzeichnis besitzt und dass die Dateiberechtigungen korrekt eingestellt sind:

sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com

404 Not Found

Überprüfen Sie, dass die root Direktive in Ihrem Server-Block auf das richtige Verzeichnis verweist und dass index.html in diesem Pfad vorhanden ist.

Falsche Website wird geladen

Wenn der Besuch von example1.com den Inhalt von example2.com lädt, überprüfen Sie, dass:

  • Jede server_name Direktive eindeutig und korrekt ist
  • Symlinks in sites-enabled gültig sind: ls -la /etc/nginx/sites-enabled/
  • Die Standard-Website deaktiviert ist, falls sie einen Konflikt verursacht

Nginx startet nach Konfigurationsänderung nicht

Führen Sie immer sudo nginx -t vor dem Neustart aus. Überprüfen Sie die Fehlerausgabe sorgfältig — sie zeigt die genaue Datei und Zeile, die das Problem verursacht.

Protokolle überprüfen

Pro-Website-Protokolle (konfiguriert in Schritt 3) sind Ihre beste Debugging-Ressource:

sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.log

Erweiterte Überlegungen

Hosting von PHP-Anwendungen

Wenn Ihre Websites PHP ausführen (z. B. WordPress, Laravel), müssen Sie PHP-FPM installieren und eine fastcgi_pass Direktive zu Ihrem Server-Block hinzufügen:

location ~ .php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Verwendung eines Control Panels

Die manuelle Verwaltung von Nginx Virtual Hosts über die Befehlszeile ist leistungsstark, aber zeitaufwändig in großem Maßstab. Wenn Sie eine grafische Benutzeroberfläche bevorzugen, erwägen Sie AlexHost’s VPS mit cPanel oder erkunden Sie die vollständige Palette von VPS Control Panels, um die richtige Lösung für Ihren Arbeitsablauf zu finden.

Skalierung über einen einzelnen VPS hinaus

Mit zunehmendem Datenverkehr kann ein einzelner VPS möglicherweise nicht ausreichend sein. Für hochfrequente, ressourcenintensive Workloads erwägen Sie ein Upgrade auf Dedicated Servers für garantierte Ressourcen, vollständige Hardware-Isolation und maximale Leistung.

Fazit

Sie haben jetzt erfolgreich Nginx Virtual Hosts auf Ubuntu konfiguriert und können damit mehrere unabhängige Websites gleichzeitig auf Ihrem Server hosten. Hier ist eine Zusammenfassung der durchgeführten Schritte:

  • Isolierte Web-Root-Verzeichnisse für jede Domain mit korrektem Besitz und Berechtigungen erstellt
  • Saubere, produktionsreife Server-Block-Konfigurationen mit separaten Access- und Error-Logs geschrieben
  • Virtual Hosts aktiviert mit Nginx's Symlink-basiertem sites-available / sites-enabled Muster
  • Nginx-Konfiguration validiert und neu geladen – sicher und zuverlässig
  • Jede Website mit HTTPS gesichert mit kostenlosen Let's Encrypt-Zertifikaten über Certbot

Dieses Setup ist effizient, skalierbar und folgt Nginx Best Practices. Egal ob Sie zwei oder zwanzig Websites hosten – das gleiche Muster gilt für alle. Wiederholen Sie einfach den Prozess für jede zusätzliche Domain.

Für optimale Ergebnisse kombinieren Sie diese Konfiguration mit einer schnellen und zuverlässigen Hosting-Umgebung. AlexHost's VPS Hosting Pläne sind für Linux-Workloads optimiert, bieten vollständigen Root-Zugriff und werden durch 24/7 technischen Support unterstützt – die ideale Grundlage für den Betrieb von Nginx in der Produktion.