Wie man Virtual Hosts in Nginx auf Ubuntu konfiguriert
Das Konfigurieren von virtuellen Hosts in Nginx ist eine der leistungsstärksten Techniken zum Hosten mehrerer Websites auf einem einzelnen Server, jeweils mit eigenem Domänennamen, 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 Domäne 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 Sites, 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 bieten Ihnen vollständigen Root-Zugriff, SSD-Speicher und sofortige Bereitstellung – perfekt für genau diesen Anwendungsfall.
Inhaltsverzeichnis
- Voraussetzungen
- Verzeichnisse für jede Website einrichten
- Beispiel-HTML-Inhalte erstellen
- Konfigurationsdateien für virtuelle Hosts erstellen
- Virtuelle Hosts aktivieren
- Nginx-Konfiguration testen
- Nginx neu starten, um Änderungen anzuwenden
- Auf Ihre Websites zugreifen
- HTTPS mit Let’s Encrypt aktivieren (empfohlen)
- Fehlerbehebung bei häufigen Problemen
- Fazit
Voraussetzungen
Stellen Sie vor Beginn 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 Service läuft:
sudo systemctl status nginxSie sollten active (running) in der Ausgabe sehen. Falls nicht, starten Sie es manuell:
sudo systemctl start nginx
sudo systemctl enable nginxDomänennamen, die auf Ihren Server verweisen
Jeder virtuelle Host benötigt einen Domänennamen, der sich in die öffentliche IP-Adresse Ihres Servers auflöst. Sie müssen A-Einträge in Ihren DNS-Einstellungen erstellen, die auf die Server-IP verweisen.
> Benötigen Sie eine Domäne? Registrieren Sie Ihre über AlexHost Domain Registration und verwalten Sie DNS-Einträge direkt von Ihrem Control Panel 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-Service zu verwalten.
Schritt 1: Verzeichnisse für jede Website einrichten
Jede auf Ihrem Server gehostete Website sollte ihr eigenes isoliertes Verzeichnis haben, um Webdateien zu speichern. Diese Trennung hält Ihre Projekte organisiert und verhindert Konfigurationskonflikte.
In diesem Leitfaden konfigurieren wir zwei Beispieldomänen: example1.com und example2.com. Ersetzen Sie diese überall im Leitfaden durch Ihre tatsächlichen Domänennamen.
Erstellen Sie die Web-Root-Verzeichnisse
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlDas -p Flag erstellt alle zwischengelagerten Verzeichnisse nach Bedarf.
Weisen Sie die richtige Eigenschaft zu
Gewähren Sie Eigentumsrechte 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/htmlDies stellt sicher, dass Nginx die erforderlichen Leseberechtigungen hat, um Dateien aus diesen Verzeichnissen bereitzustellen.
Legen Sie Verzeichnisberechtigungen fest
sudo chmod -R 755 /var/wwwDie 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-Inhalte erstellen
Um zu überprüfen, dass jeder virtuelle Host ordnungsgemäß funktioniert, erstellen Sie eine einfache index.html Datei für jede Site.
Für example1.com
echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.htmlFür example2.com
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlDiese Platzhalterseiten bestätigen, dass Nginx Anfragen zum richtigen Dokumentenstamm für jede Domäne leitet.
Schritt 3: Konfigurationsdateien für virtuelle Hosts erstellen
Nginx speichert Site-Konfigurationsdateien in /etc/nginx/sites-available/. Jede Datei definiert einen Server Block – das Nginx-Äquivalent eines Apache-Virtual-Hosts. Aktivierte Sites werden dann in /etc/nginx/sites-enabled/ symlinkt.
Konfiguration für example1.com
Erstellen Sie eine neue Konfigurationsdatei:
sudo nano /etc/nginx/sites-available/example1.comFü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.comFü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
| Direktive | Zweck |
|---|---|
listen 80 | Lauscht auf eingehende HTTP-Verbindungen auf Port 80 |
listen [::]:80 | Aktiviert IPv6-Unterstützung auf Port 80 |
server_name | Definiert, welche Domänennamen dieser Block handhabt |
root | Legt das Dokumentenstammverzeichnis fest – wo Website-Dateien gespeichert sind |
index | Gibt die Standarddatei an, die bereitgestellt wird, wenn ein Verzeichnis angefordert wird |
try_files | Versucht, die angeforderte Datei bereitzustellen; gibt 404 zurück, wenn nicht gefunden |
access_log / error_log | Separate Protokolldateien pro Site für einfachere Fehlerbehebung |
Schritt 4: Virtuelle Hosts aktivieren
Nginx aktiviert Sites, indem symbolische Links von sites-available zu sites-enabled erstellt werden. 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/Deaktivieren Sie die Standard-Site (Optional, aber empfohlen)
Wenn Sie verhindern möchten, dass die Standard-Platzhalterseite von Nginx Probleme verursacht, deaktivieren Sie sie:
sudo rm /etc/nginx/sites-enabled/defaultSie können sie später jederzeit wieder aktivieren, indem Sie den Symlink neu erstellen.
Schritt 5: Testen Sie die Nginx-Konfiguration
Überprüfen Sie vor dem Neustart von Nginx immer Ihre Konfigurationsdateien auf Syntaxfehler. Eine falsch konfigurierte Datei kann alle Sites auf dem Server zum Absturz bringen.
sudo nginx -tEin erfolgreicher Test gibt zurück:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulWenn Sie Fehler sehen, gibt Nginx die Datei und Zeilennummer an, in der das Problem auftritt. Ü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 nginxAlternativ können Sie reload für einen sanften Neustart verwenden, der aktive Verbindungen nicht unterbricht:
sudo systemctl reload nginxSchritt 7: Auf Ihre Websites zugreifen
Wenn DNS bereits konfiguriert ist
Wenn Ihre Domänennamen bereits über DNS A-Einträge auf die IP-Adresse Ihres Servers verweisen, öffnen Sie einfach einen Browser und navigieren Sie zu:
http://example1.comhttp://example2.com
Sie sollten die jeweiligen „Willkommens”-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 Ihres lokalen Computers (auf Linux/macOS) oder C:WindowsSystem32driversetchosts (auf Windows) bearbeiten.
Öffnen Sie die Datei mit erhöhten Berechtigungen:
sudo nano /etc/hostsFü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.comSpeichern 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)
Das Ausführen 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-Zertifikate für Unternehmen, die erweiterte Validierung oder Wildcard-Abdeckung benötigen.
Installieren Sie Certbot
sudo apt install certbot python3-certbot-nginxErhalten und installieren Sie SSL-Zertifikate
Führen Sie Certbot für jede Domäne aus. Das --nginx Plugin ändert automatisch Ihre Nginx-Konfiguration, um HTTPS zu aktivieren:
sudo certbot --nginx -d example1.com -d www.example1.comsudo certbot --nginx -d example2.com -d www.example2.comFolgen Sie den interaktiven Eingabeaufforderungen. Certbot wird:
- Domänenbesitz über HTTP-Challenge überprüfen
- Ein signiertes Zertifikat von Let’s Encrypt erhalten
- Ihren Nginx-Server-Block automatisch aktualisieren, um auf Port 443 zu lauschen
- HTTP-zu-HTTPS-Umleitung konfigurieren
Überprüfen Sie die automatische Erneuerung
Let’s Encrypt-Zertifikate verfallen alle 90 Tage. Certbot installiert einen systemd-Timer zur automatischen Handhabung von Erneuerungen. Testen Sie es mit:
sudo certbot renew --dry-runWenn der Testlauf ohne Fehler abgeschlossen wird, werden Ihre Zertifikate automatisch erneuert, ohne dass manuelle Eingriffe erforderlich sind.
So sieht Ihr aktualisierter Server Block aus
Nach dem Ausführen 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 kommunizieren kann (z. B. PHP-FPM oder eine Node.js-App). Überprüfen Sie, ob der Upstream-Service läuft und dass der Socket/Port in Ihrer Konfiguration korrekt ist.
403 Forbidden
Normalerweise ein Berechtigungsproblem. Überprüfen Sie, dass www-data das Web-Root besitzt und dass Dateiberechtigungen korrekt eingestellt sind:
sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com404 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.
