Wie konfiguriert man Nginx für mehrere Domains auf derselben IP?

Veröffentlicht 17. Oktober 2024

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:

  1. Öffnen Sie eine neue Datei im sites-available Verzeichnis:

    sudo nano /etc/nginx/sites-available/domain1.conf
  2. Fügen Sie einen Server-Block für Ihre erste Domain hinzu:

    server {
       listen 80;
       server_name domain1.com www.domain1.com;
       # Andere Direktiven...
    }
  3. Wiederholen Sie diesen Vorgang für Ihre zweite Domain in einer neuen Datei:

    sudo nano /etc/nginx/sites-available/domain2.conf
  4. 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:

  1. Erstellen Sie Verzeichnisse für jede Domain:

    sudo mkdir -p /var/www/domain1.com
    sudo mkdir -p /var/www/domain2.com
  2. 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:

  1. 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;
       }
    }
  2. 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.