So richten Sie NGINX-Subdomains oder mehrere Domains ein

Hast du einen Server mit einer einzigen öffentlichen IP-Adresse, aber musst mehrere Domänen oder Subdomänen hosten? Was würdest du tun? Dieses Szenario kann für Anfänger verwirrend sein. Aber keine Sorge, dieses Tutorial hat dich abgedeckt, damit du eine NGINX-Subdomäne und mehrere Domänen bedienen kannst.

In diesem Tutorial lernst du, wie du effektiv NGINX-Subdomänen oder mehrere Domänen auf einem Server mit einer einzigen IP-Adresse bedienen kannst!

Wenn du bereit bist, ist es Zeit, loszulegen!

Voraussetzungen

Dieses Tutorial wird mit praktischen Demos geliefert, erfordert jedoch nicht viele Voraussetzungen und setzt voraus, dass du einen Ubuntu Server LTS mit aktivierter SSH-Verbindung und installiertem NGINX hast. Die Demos in diesem Tutorial laufen auf Ubuntu Server LTS 20.04.1.

Einrichten von DNS-Einträgen

Bevor du NGINX-Subdomänen oder mehrere Domänen bedienen kannst, musst du einen A-Eintrag in einem DNS-Control-Panel hinzufügen. Der A-Eintrag bindet und zeigt alle Domänen und Subdomänen auf eine einzige IP-Adresse, damit Webbrowser deine Website finden können.

1. Starten Sie Ihren bevorzugten Webbrowser und melden Sie sich bei Ihrem DNS-Steuertafel an.

2. Klicken Sie auf Eintrag hinzufügen, um mit dem Hinzufügen von A-Einträgen zu beginnen. Ihr Browser leitet Sie auf eine Seite weiter, auf der Sie DNS-Einstellungen für Ihre Domain und Subdomains konfigurieren können.

Adding an A Record

Konfigurieren Sie nun die DNS-Einstellungen wie folgt:

Wählen Sie im Feld Typ den Eintrag A.

Geben Sie @ im Feld Host ein und Ihre Server-IP im Feld Wert.

Wählen Sie Ihren gewünschten Wert im Feld TTL aus und klicken Sie dann auf die Schaltfläche Bestätigen, um die Einstellungen zu speichern.

Wiederholen Sie diesen Vorgang für andere Subdomains.

Configuring DNS settings for Domain and Subdomains The final DNS Settings page looks like the one below.

Die abschließende Seite DNS-Einstellungen sieht wie folgt aus.

Viewing DNS Settings Page

Ihr DNS-Eintrag-Steuertafel kann je nach Funktionalität und Design variieren, aber die gleichen Prinzipien gelten für alle.

Einrichten von Webverzeichnissen für NGINX-Domain und Subdomain

Jetzt, da Sie A-Einträge für Ihre Domain und Subdomains hinzugefügt haben, ist es an der Zeit, ihre Webverzeichnisse einzurichten. NGINX wird mit einer Standard-Virtual-Host-Datei geliefert und ist so konfiguriert, dass es ein Webverzeichnis unter /usr/share/nginx/html bedient.

Sie werden für jede Domain ein separates Webverzeichnis innerhalb des NGINX-Standarddokumentenstamms (/var/www/html) erstellen.

1. Öffnen Sie zuerst Ihr Terminal und führen Sie die folgenden Befehle aus, um Webverzeichnisse für alle Domänen und Subdomänen zu erstellen. Dadurch werden Dateien für jede Website getrennt, organisiert und isoliert.

sudo mkdir /var/www/html/awstutorial.net
sudo mkdir /var/www/html/web1.awstutorial.net
sudo mkdir /var/www/html/web2.awstutorial.net

2. Führen Sie anschließend den Befehl chown aus, um rekursiv (-R) den Besitz jedes Verzeichnisses, das Sie im ersten Schritt erstellt haben, auf den Benutzer und die Gruppe www-data zu ändern. Sie ändern den Besitz jedes Verzeichnisses auf den Benutzer und die Gruppe www-data, da NGINX als Benutzer www-data läuft.

sudo chown -R www-data:www-data /var/www/html/awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web1.awstutorial.net
sudo chown -R www-data:www-data /var/www/html/web2.awstutorial.net

3. Erstellen Sie eine Datei mit dem Namen index.html in Ihrem bevorzugten Code-Editor und kopieren Sie dann den Code unten in die Datei index.html. Speichern Sie die Datei im Hauptwebverzeichnis Ihrer Domänen (/var/www/html/awstutorial.net).

Der HTML-Code unten zeigt eine Meldung an, die besagt „Herzlichen Glückwunsch! Die awstutorial.net-Website funktioniert!“, wenn die Datei index.html in einem Webbrowser geöffnet wird.

<html>
	<head>
	  <title>Welcome to awstutorial.net!</title>
  </head>
	  <body>
	    <h1>Congratulations! The awstutorial.net website is working!</h1>
    </body>
</html>

4. Erstellen Sie schließlich die gleiche index.html in den Verzeichnissen /var/www/html/web1.awstutorial.net und /var/www/html/web2.awstutorial.net. Ersetzen Sie jedoch awstutorial.net durch web1.awstutorial.net und web2.awstutorial.net im Code jeder index.html entsprechend.

Einrichten des virtuellen Hosts für die NGINX-Domäne und Subdomänen

Sie haben bereits eine index.html-Seite für Ihre Domäne und Subdomänen, die über einen NGINX-Webserver bereitgestellt werden soll. Der nächste Schritt besteht darin, für jede Domäne eine NGINX-Virtual-Host-Konfigurationsdatei zu erstellen, um die HTML-Seiten bereitzustellen.

1. Erstellen Sie eine NGINX-Virtual-Host-Konfigurationsdatei mit dem Namen awstutorial.net in Ihrem bevorzugten Code-Editor und kopieren Sie dann den unten stehenden Code in diese Datei. Speichern Sie die Datei im Verzeichnis /etc/nginx/sites-available/.

Der unten stehende Code steuert das Verhalten Ihres Servers, wie z.B. den Servernamen und die Index (Start-)Seite, wenn ein Benutzer versucht, auf Ihre Domain zuzugreifen.

server {
        # Bindet den TCP-Port 80.
        listen 80; 

				# Stammverzeichnis, in dem nach einer Datei gesucht wird
        root /var/www/html/awstutorial.net;
				# Definiert die Datei, die als Indexseite verwendet wird
        index index.html index.htm;
				# Definiert den Domain- oder Subdomain-Namen.
        # Wenn in einem Serverblock kein server_name definiert ist, dann 
				# verwendet Nginx den 'leeren' Namen
        server_name awstutorial.net;

        location / {
            # Gibt einen 404-Fehler für Fälle zurück, in denen der Server 
						# Anfragen nach nicht nachverfolgbaren Dateien und Verzeichnissen erhält.
            try_files $uri $uri/ =404;
        }
    }

2. Führen Sie anschließend den folgenden nginx-Befehl aus, um die NGINX-Konfigurationsdatei auf Syntaxfehler zu überprüfen (-t).

sudo nginx -t

Wenn in der NGINX-Konfigurationsdatei kein Syntaxfehler gefunden wird, erhalten Sie folgende Ausgabe.

Verifying NGINX configuration file

3. Führen Sie als Nächstes den folgenden Befehl aus, um einen symbolischen Link (`ln -s`) vom Verzeichnis /etc/nginx/sites-available zum Verzeichnis /etc/nginx/sites-enabled/ zu erstellen. Dieser Befehl aktiviert die Konfigurationsdatei für den virtuellen Host awstutorial.net.

sudo ln -s /etc/nginx/sites-available/awstutorial.net /etc/nginx/sites-enabled/

Das Format sites-available und sites-enabled ist standardmäßig in einer NGINX-Installation unter Ubuntu, aber andere Distributionen können einen anderen Standard verwenden.

4. Wiederholen Sie die Schritte eins bis drei, um NGINX-Konfigurationsdateien für virtuelle Hosts mit den Namen web1.awstutorial.net und web2.awstutorial.net zu erstellen.

Ändern Sie die folgenden Zeilen in jeder NGINX-Konfigurationsdatei für virtuelle Hosts:

  • Ersetzen Sie die Zeile root /var/www/html/awstutorial.net durch das Stammverzeichnis jedes Subdomains (root /var/www/html/web1.awstutorial.net und root /var/www/html/web2.awstutorial.net).
  • Ersetzen Sie die Zeile server_name awstutorial.net durch den Namen jeder Subdomain (server_name web1.awstutorial.net und server_name web2.awstutorial.net).

5. Führen Sie nun die folgenden `sudo ln`-Befehle aus, wie Sie es in Schritt drei getan haben, um die Konfigurationsdateien für virtuelle Hosts zu aktivieren.

# Aktiviert die NGINX-Virtual-Host-Konfigurationsdatei für web1.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web1.awstutorial.net /etc/nginx/sites-enabled/
# Aktiviert die NGINX-Virtual-Host-Konfigurationsdatei für web2.awstutorial.net
sudo ln -s /etc/nginx/sites-available/web2.awstutorial.net /etc/nginx/sites-enabled/

6. Führen Sie den folgenden systemctl-Befehl aus, um den NGINX-Dienst neu zu starten (restart nginx), um alle Konfigurationsänderungen anzuwenden.

sudo systemctl restart nginx

7. Navigieren Sie schließlich zu den URLs der Domain und Subdomains in Ihrem Browser, um zu überprüfen, ob die Websites ordnungsgemäß funktionieren.

Wenn die Domain und die Subdomains geladen werden, sehen Sie eine Meldung wie die unten stehende.

Verifying websites are loading through the web browser.

Einrichten von HTTPS auf NGINX-Domain und Subdomain

Sie haben erfolgreich eine NGINX-Domain und Subdomains auf dem HTTP-Protokoll eingerichtet und getestet, was großartig ist. Aber Sie müssen die Verbindung Ihrer Domain und Subdomains sichern, indem Sie HTTPS aktivieren. Wie? Mit einem Zertifikat, das Sie von einer Zertifizierungsstelle wie Let’s Encrypt SSL erhalten.

1. Führen Sie zuerst den Befehl unten aus, um das Softwarepaket Certbot zu installieren (apt-get install certbot). Certbot ermöglicht es Ihnen, ein SSL-Zertifikat für Ihre Domain und Subdomains herunterzuladen.

sudo apt-get install certbot python3-certbot-nginx -y

2. Führen Sie den folgenden Befehl aus, um ein SSL-Zertifikat (certonly) für Ihre Domain (-d awstutorial.net) herunterzuladen. Beachten Sie, dass Sie den Nutzungsbedingungen (--agree-tos) mit Ihrer E-Mail-Adresse (--email) zustimmen.

sudo certbot certonly --agree-tos --email [email protected] -d awstutorial.net

Ersetzen Sie die E-Mail-Adresse durch Ihre eigene.

3. Geben Sie ‚1‘ ein, um das NGINX Web Server Plugin (nginx) zur Authentifizierung mit dem ACME CA auszuwählen, wie unten gezeigt.

Selecting Plugin to Authenticate with ACME CA

Nach Auswahl des NGINX Web Server Plugins sehen Sie den Fortschritt des Downloads des SSL-Zertifikats für Ihre Domain (awstutorial.net).

Standardmäßig werden die SSL-Zertifikate von Let’s Encrypt im Verzeichnis /etc/letsencrypt/live/ gespeichert.

Showing Download Progress of the SSL Certificate

4. Führen Sie nun jeden der folgenden Befehle aus, wie Sie es im zweiten Schritt getan haben, um SSL-Zertifikate für die verbleibenden Subdomains (web1.awstutorial.net und web2.awstutorial.net) herunterzuladen.

sudo certbot certonly --agree-tos --email [email protected] -d web1.awstutorial.net
sudo certbot certonly --agree-tos --email [email protected] -d web2.awstutorial.net

5. Führen Sie abschließend den Befehl ls aus, um alle SSL-Zertifikate im Verzeichnis /etc/letsencrypt/live/ aufzulisten, die (*) die awstutorial.net in ihrem Namen enthalten. Dadurch können Sie überprüfen, ob die SSL-Zertifikate vorhanden sind.

ls /etc/letsencrypt/live/*awstutorial.net/

Unten sehen Sie die SSL-Zertifikate für Ihre Domain und Subdomains.

Showing SSL certificate for all domains.

Konfigurieren des NGINX Virtual Hosts zur Verwendung von SSL-Zertifikaten

An diesem Punkt haben Sie bereits SSL-Zertifikate zur Verfügung. Aber wie verwenden Sie sie, um Ihre Domain und Subdomains zu sichern? Sie definieren den Pfad der Zertifikate im server-Block jeder NGINX-Virtual-Host-Konfigurationsdatei.

1. Öffnen Sie die NGINX-Virtual-Host-Konfigurationsdatei von awstutorial.net, die sich im Verzeichnis /etc/nginx/sites-available/ in Ihrem bevorzugten Code-Editor befindet.

2. Ersetzen Sie den Inhalt der Datei durch den untenstehenden Code, in dem Sie den Pfad Ihres Domain-SSL-Zertifikats und das SSL-Protokoll definieren (unter Pfad des SSL-Zertifikats).

server {
	     # Bindet den TCP-Port 80.
       listen 80;
	     # Definiert den Domänen- oder Subdomänennamen. 
       # Wenn in einem Serverblock kein server_name definiert ist, 
	     # verwendet Nginx den 'leeren' Namen
       server_name awstutorial.net;
	     # Leitet den Traffic zum entsprechenden 
	     # HTTPS-Serverblock mit dem Statuscode 301 um
       return 301 https://$host$request_uri;
       }

server {
        # Bindet den TCP-Port 443 und aktiviert SSL.
        listen 443 SSL;
	      # Stammverzeichnis, in dem nach einer Datei gesucht wird        
	      root /var/www/html/awstutorial.net; 
	      # Definiert den Domänen- oder Subdomänennamen. 
        # Wenn in einem Serverblock kein server_name definiert ist, 
	      # verwendet Nginx den 'leeren' Namen
        server_name awstutorial.net;

	      # Pfad des SSL-Zertifikats
        ssl_certificate /etc/letsencrypt/live/awstutorial.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/awstutorial.net/privkey.pem;
	      # Verwendet die Datei, die durch den Befehl certbot generiert wurde.
        include /etc/letsencrypt/options-ssl-nginx.conf;
	      # Definiert den Pfad zur dhparam.pem-Datei.
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

        location / {
	      # Gibt einen 404-Fehler zurück, wenn der Server 
	      # Anfragen für nicht nachverfolgbare Dateien und Verzeichnisse erhält.
        try_files $uri $uri/ =404;
        }

    }

3. Wiederholen Sie den gleichen Prozess (Schritte eins bis zwei) für die verbleibenden Konfigurationsdateien für virtuelle Hosts (web1.awstutorial.net und web2.awstutorial.net). Stellen Sie jedoch sicher, dass Sie den Pfad des SSL-Zertifikats durch den Pfad des Zertifikats Ihres Subdomains ersetzen (unter Pfad des SSL-Zertifikats).

4. Führen Sie nun das systemctl-Befehl unten erneut aus, um den NGINX-Dienst neu zu starten und die Konfigurationsänderungen anzuwenden.

sudo systemctl restart nginx

5. Navigieren Sie abschließend mit Ihrem Webbrowser zu den URLs Ihrer Domain und Subdomain. Verwenden Sie diesmal jedoch anstelle des HTTP-Protokolls HTTPS, um zu überprüfen, ob sie funktionieren.

Unten sehen Sie ein Vorhängeschlosssymbol in der Adressleiste, das darauf hinweist, dass die Website mit Ihrem SSL-Zertifikat gesichert ist.

Verifying Domain is Secure

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie einen NGINX-Subdomain oder mehrere Domains konfigurieren, indem Sie eine Konfigurationsdatei für virtuelle Hosts erstellen. Sie haben auch darüber gesprochen, wie Sie Ihre Domains mit einem SSL-Zertifikat sichern, das Sie ebenfalls in der Konfigurationsdatei für virtuelle Hosts definieren.

Warum verwenden Sie dieses Setup nicht in einer Produktionsumgebung, beispielsweise um mehrere Apps auf einem einzelnen Server zu hosten und kostengünstiges Webhosting anzubieten?

Source:
https://adamtheautomator.com/nginx-subdomain/