Problem: Hosting mehrerer Domains auf einer IP-Adresse
Das Hosten mehrerer Websites mit verschiedenen Domainnamen auf einer einzelnen Server-IP-Adresse kann schwierig sein. Nginx, ein beliebter Webserver, bietet eine Lösung für dieses Problem, erfordert jedoch die richtige Konfiguration, um mehrere Domains zu verwalten.
Lösung: Korrekte Nginx-Konfiguration für mehrere Domains
Einrichten von Server-Blöcken
Server-Blöcke in Nginx ermöglichen das Hosting mehrerer Domains auf einem Server. Sie erlauben unterschiedliche Konfigurationen für jede Domain, einschließlich Dokumentenwurzeln und Logging.
Um Server-Blöcke für jede Domain zu erstellen, definieren Sie diese in Ihrer Nginx-Konfigurationsdatei. Jeder Server-Block beginnt mit der server
-Direktive und enthält Einstellungen für diese Domain.
Tipp: Organisieren Sie Ihre Konfiguration
Halten Sie Ihre Nginx-Konfiguration übersichtlich, indem Sie separate Dateien für jede Domain im Verzeichnis /etc/nginx/sites-available/ erstellen. Erstellen Sie dann symbolische Links zu diesen Dateien im Verzeichnis /etc/nginx/sites-enabled/, um sie zu aktivieren.
Konfigurieren der Listen-Direktive
Die 'listen'-Direktive in Nginx teilt dem Server mit, welche IP-Adresse und welchen Port er für eingehende Verbindungen verwenden soll. Bei der Einrichtung mehrerer Domains verwenden Sie die 'listen'-Direktive korrekt.
Die richtige Verwendung der 'listen'-Direktive besteht darin, nur die Portnummer anzugeben, normalerweise 80 für HTTP oder 443 für HTTPS. Zum Beispiel:
listen 80;
Fügen Sie die Domain nicht in die 'listen'-Direktive ein. Dies ist falsch und kann Probleme verursachen.
Verwendung der Server_Name-Direktive
Die 'server_name'-Direktive ist wichtig für das Domain-Routing in Nginx. Sie teilt Nginx mit, welche Domainnamen mit einem Server-Block verknüpft werden sollen.
Um 'server_name' für jede Domain einzurichten, fügen Sie es in den Server-Block ein. Zum Beispiel:
server_name www.domain1.example domain1.example;
Sie können mehrere Domainnamen hinzufügen, mit und ohne 'www'-Präfix, um alle Versionen Ihres Domainnamens abzudecken.
Beispiel: Wildcard-Subdomains
Wenn Sie alle Subdomains einer Domain abdecken möchten, können Sie einen Platzhalter in der server_name-Direktive verwenden:
server_name *.domain1.example;
Dies passt auf jede Subdomain von domain1.example.
Schritt-für-Schritt-Anleitung zur Konfiguration von Nginx für mehrere Domains
Bearbeiten der Nginx-Konfigurationsdatei
Um mehrere Domains in Nginx einzurichten, finden und öffnen Sie die Haupt-Nginx-Konfigurationsdatei. Auf den meisten Systemen befindet sich diese Datei unter /etc/nginx/nginx.conf
. Es ist besser, separate Konfigurationsdateien für jede Domain im Verzeichnis /etc/nginx/sites-available/
zu erstellen.
So erstellen Sie separate Server-Blöcke für jede Domain:
-
Öffnen Sie eine neue Datei im sites-available Verzeichnis:
sudo nano /etc/nginx/sites-available/domain1.conf
-
Fügen Sie einen Server-Block für Ihre erste Domain hinzu:
server { listen 80; server_name domain1.com www.domain1.com; # Andere Direktiven... }
-
Wiederholen Sie diesen Vorgang für Ihre zweite Domain in einer neuen Datei:
sudo nano /etc/nginx/sites-available/domain2.conf
-
Fügen Sie den Server-Block für die zweite Domain hinzu:
server { listen 80; server_name domain2.com www.domain2.com; # Andere Direktiven... }
Tipp: Symlink-Konfigurationsdateien
Nachdem Sie Konfigurationsdateien im sites-available Verzeichnis erstellt haben, erstellen Sie symbolische Links, um sie zu aktivieren:
sudo ln -s /etc/nginx/sites-available/domain1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain2.conf /etc/nginx/sites-enabled/
Diese Methode ermöglicht es Ihnen, Sites einfach zu aktivieren oder zu deaktivieren, indem Sie Symlinks erstellen oder entfernen.
Einrichten von Root-Verzeichnissen
Separate Root-Verzeichnisse für jede Domain halten die Dateien für verschiedene Websites getrennt, was die Verwaltung und Sicherheit erleichtert.
So geben Sie Root-Verzeichnisse in der Konfiguration an:
-
Erstellen Sie Verzeichnisse für jede Domain:
sudo mkdir -p /var/www/domain1.com sudo mkdir -p /var/www/domain2.com
-
Fügen Sie in jedem Server-Block der Domain die root-Direktive hinzu:
server { listen 80; server_name domain1.com www.domain1.com; root /var/www/domain1.com; # Andere Direktiven... }
Konfigurieren der PHP-Verarbeitung (falls zutreffend)
Wenn Ihre Websites PHP verwenden, richten Sie FastCGI für die PHP-Verarbeitung ein:
-
Fügen Sie in jedem Server-Block einen location-Block für PHP hinzu:
server { # Andere Direktiven... location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; } }
-
Stellen Sie sicher, dass die FastCGI-Parameter für jede Domain korrekt sind. Die
fastcgi_param
-Direktiven sollten auf das korrekte Dokumentenroot verweisen:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Nachdem Sie diese Änderungen vorgenommen haben, testen Sie Ihre Nginx-Konfiguration und starten Sie den Nginx-Dienst neu, um die Änderungen anzuwenden.