So richten Sie Nginx-Serverblöcke (virtuelle Hosts) unter Ubuntu 16.04 ein

Einführung

Bei Verwendung des Nginx-Webservers können * Serverblöcke * (ähnlich den virtuellen Hosts in Apache) verwendet werden, um Konfigurationsdetails zu kapseln und mehr als eine Domäne von einem einzelnen Server zu hosten.

In diesem Handbuch wird erläutert, wie Sie Serverblöcke in Nginx auf einem Ubuntu 16.04-Server konfigurieren.

Voraussetzungen

In diesem Lernprogramm wird ein Benutzer ohne Rootberechtigung mit den Rechten "+ sudo +" verwendet. Wenn Sie keinen solchen Benutzer konfiguriert haben, können Sie einen erstellen, indem Sie unserem Ubuntu 16.04 initial server folgen Setup.

Außerdem muss Nginx auf Ihrem Server installiert sein. Die folgenden Handbücher behandeln dieses Verfahren:

Wenn Sie diese Anforderungen erfüllt haben, können Sie mit dieser Anleitung fortfahren.

Beispielkonfiguration

Zu Demonstrationszwecken richten wir mit unserem Nginx-Server zwei Domänen ein. Die in diesem Handbuch verwendeten Domainnamen sind * example.com * und * test.com *.

Eine Anleitung zum Einrichten von Domain-Namen mit DigitalOcean finden Sie unter here. Wenn Sie nicht über zwei freie Domain-Namen verfügen, verwenden Sie zunächst Dummy-Namen. Wir zeigen Ihnen später, wie Sie Ihren lokalen Computer konfigurieren, um Ihre Konfiguration zu testen.

Erster Schritt: Einrichten neuer Dokumentstammverzeichnisse

In Nginx unter Ubuntu 16.04 ist standardmäßig ein Serverblock aktiviert. Es ist so konfiguriert, dass Dokumente aus einem Verzeichnis unter + / var / www / html bereitgestellt werden.

Obwohl dies für eine einzelne Site gut funktioniert, benötigen wir zusätzliche Verzeichnisse, wenn wir mehrere Sites beliefern möchten. Wir können das Verzeichnis "+ / var / www / html" als das Standardverzeichnis betrachten, das bereitgestellt wird, wenn die Client-Anfrage keiner unserer anderen Sites entspricht.

Wir werden für jede unserer Sites eine Verzeichnisstruktur in + / var / www + erstellen. Der eigentliche Webinhalt wird in einem "+ html " - Verzeichnis innerhalb dieser sitespezifischen Verzeichnisse abgelegt. Dies gibt uns zusätzliche Flexibilität, um andere Verzeichnisse, die mit unseren Sites verknüpft sind, bei Bedarf als Geschwister des Verzeichnisses " html +" zu erstellen.

Wir müssen diese Verzeichnisse für jede unserer Sites erstellen. Das + -p + Flag weist + mkdir + an, alle erforderlichen übergeordneten Verzeichnisse auf dem Weg zu erstellen:

sudo mkdir -p /var/www//html
sudo mkdir -p /var/www//html

Nachdem wir unsere Verzeichnisse haben, werden wir das Eigentum an den Webverzeichnissen unserem normalen Benutzerkonto zuweisen. Dadurch können wir ihnen ohne "+ sudo +" schreiben.

Note

Wir können die Umgebungsvariable "+ $ USER " verwenden, um dem Konto, bei dem wir gerade angemeldet sind, den Besitz zuzuweisen (stellen Sie sicher, dass Sie nicht als " root +" angemeldet sind). Auf diese Weise können wir den Inhalt in diesem Verzeichnis auf einfache Weise erstellen oder bearbeiten:

sudo chown -R $USER:$USER /var/www//html
sudo chown -R $USER:$USER /var/www//html

Die Berechtigungen unserer Web-Roots sollten bereits korrekt sein, wenn Sie Ihren "+ umask +" - Wert nicht geändert haben. Wir können dies jedoch sicherstellen, indem Sie Folgendes eingeben:

sudo chmod -R 755 /var/www

Unsere Verzeichnisstruktur ist jetzt konfiguriert und wir können weitermachen.

Schritt 2: Erstellen Sie Beispielseiten für jede Site

Nachdem wir unsere Verzeichnisstruktur eingerichtet haben, erstellen wir für jede unserer Websites eine Standardseite, damit wir etwas anzeigen können.

Erstellen Sie eine "+ index.html" -Datei in Ihrer ersten Domain:

nano /var/www//html/index.html

In der Datei erstellen wir eine einfache Datei, die angibt, auf welche Site wir gerade zugreifen. Es wird so aussehen:

/var/www/example.com/html/index.html

<html>
   <head>
       <title>Welcome to !</title>
   </head>
   <body>
       <h1>Success!  The  server block is working!</h1>
   </body>
</html>

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Da die Datei für unsere zweite Site im Grunde dieselbe sein wird, können wir sie wie folgt in unser zweites Dokumentenstammverzeichnis kopieren:

cp /var/www//html/index.html /var/www//html/

Jetzt können wir die neue Datei in unserem Editor öffnen:

nano /var/www//html/index.html

Ändern Sie es so, dass es auf unsere zweite Domain verweist:

/var/www/test.com/html/index.html

<html>
   <head>
       <title>Welcome to !</title>
   </head>
   <body>
       <h1>Success!  The  server block is working!</h1>
   </body>
</html>

Speichern und schließen Sie diese Datei, wenn Sie fertig sind. Wir haben jetzt einige Seiten, die den Besuchern unserer beiden Domains angezeigt werden sollen.

Schritt 3: Erstellen Sie Server-Blockdateien für jede Domäne

Nachdem wir nun den Inhalt haben, den wir bereitstellen möchten, müssen wir die Serverblöcke erstellen, die Nginx mitteilen, wie dies zu tun ist.

Standardmäßig enthält Nginx einen Serverblock mit dem Namen "+ default +", den wir als Vorlage für unsere eigenen Konfigurationen verwenden können. Zunächst entwerfen wir den Serverblock unserer ersten Domain, den wir dann für unsere zweite Domain kopieren und die erforderlichen Änderungen vornehmen.

Erstellen Sie die erste Serverblockdatei

Wie oben erwähnt, erstellen wir unsere erste Serverblock-Konfigurationsdatei, indem wir die Standarddatei kopieren:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/

Öffnen Sie nun die neue Datei, die Sie in Ihrem Texteditor erstellt haben, mit den Rechten "+ sudo +":

sudo nano /etc/nginx/sites-available/

Wenn Sie die kommentierten Zeilen ignorieren, sieht die Datei folgendermaßen aus:

/etc/nginx/sites-available/example.com

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

       root /var/www/html;
       index index.html index.htm index.nginx-debian.html;

       server_name _;

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

Zuerst müssen wir uns die Listen-Direktiven ansehen. * Nur für einen unserer Serverblöcke auf dem Server kann die Option "+ default_server " aktiviert werden. * Dies gibt an, welcher Block eine Anfrage bedienen soll, wenn der angeforderte " server_name +" keinem der verfügbaren Serverblöcke entspricht. Dies sollte in realen Szenarien nicht sehr häufig vorkommen, da Besucher über Ihren Domain-Namen auf Ihre Website zugreifen.

Sie können eine Ihrer Sites als "Standard" festlegen, indem Sie die Option "+ default_server " in die Direktive " listen " einfügen, oder Sie können den Standardserverblock aktiviert lassen, der den Inhalt des Befehls " / var / www / html + `Verzeichnis, wenn der angeforderte Host nicht gefunden werden kann.

In diesem Handbuch belassen wir den Standard-Serverblock, um nicht übereinstimmende Anforderungen zu bearbeiten, und entfernen daher den "+ default_server +" von diesem und dem nächsten Serverblock. Sie können die Option zu jedem Ihrer Serverblöcke hinzufügen, der für Sie sinnvoll ist.

/etc/nginx/sites-available/example.com

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

       . . .
}

Note

Das nächste, was wir anpassen müssen, ist der Dokumentenstamm, der in der Direktive "+ root +" angegeben ist. Zeigen Sie auf das Dokumentstammverzeichnis der Site, das Sie erstellt haben:

/etc/nginx/sites-available/example.com

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

       root /var/www//html;

}

Als nächstes müssen wir den "+ Servername " ändern, damit er den Anforderungen für unsere erste Domain entspricht. Wir können zusätzlich alle Aliase hinzufügen, die wir zuordnen möchten. Wir werden einen " www.example.com +" - Alias ​​hinzufügen, um dies zu demonstrieren.

Wenn Sie fertig sind, sieht Ihre Datei ungefähr so ​​aus:

/etc/nginx/sites-available/example.com

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

       root /var/www//html;
       index index.html index.htm index.nginx-debian.html;

       server_name  www.;

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

Das ist alles, was wir für eine Grundkonfiguration brauchen. Speichern und schließen Sie die Datei, um sie zu beenden.

Erstellen Sie die zweite Serverblockdatei

Nachdem wir unsere anfängliche Serverblockkonfiguration haben, können wir diese als Grundlage für unsere zweite Datei verwenden. Kopieren Sie es, um eine neue Datei zu erstellen:

sudo cp /etc/nginx/sites-available/ /etc/nginx/sites-available/

Öffnen Sie die neue Datei mit den Rechten "+ sudo +" in Ihrem Editor:

sudo nano /etc/nginx/sites-available/

Stellen Sie erneut sicher, dass Sie die Option "+ default_server " für die Direktive " listen " in dieser Datei nicht verwenden, wenn Sie sie bereits an anderer Stelle verwendet haben. Passen Sie die Direktive " root " so an, dass sie auf das Dokumentenstammverzeichnis Ihrer zweiten Domain verweist, und passen Sie " server_name +" so an, dass es mit dem Domainnamen Ihrer zweiten Site übereinstimmt (achten Sie darauf, alle Aliase einzuschließen).

Wenn Sie fertig sind, sieht Ihre Datei wahrscheinlich so aus:

/etc/nginx/sites-available/test.com

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

       root /var/www//html;
       index index.html index.htm index.nginx-debian.html;

       server_name  www.;

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

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Vierter Schritt: Aktivieren Sie Ihre Server-Blöcke und starten Sie Nginx neu

Nachdem wir unsere Server-Blockdateien haben, müssen wir sie aktivieren. Wir können dies tun, indem wir symbolische Links von diesen Dateien zu dem Verzeichnis "+ sites-enabled +" erstellen, aus dem Nginx während des Startvorgangs liest.

Wir können diese Links erstellen, indem wir Folgendes eingeben:

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Diese Dateien befinden sich jetzt im aktivierten Verzeichnis. Wir haben jetzt drei Serverblöcke aktiviert, die so konfiguriert sind, dass sie auf der Grundlage ihrer Anweisung "+ listen " und der Anweisung " server_name +" antworten (Sie können mehr darüber lesen, wie Nginx diese Anweisungen verarbeitet. Https://www.digitalocean.com/community/ Tutorials / Verständnis-Nginx-Server-und-Location-Block-Auswahl-Algorithmen [hier]):

  • + example.com +: Reagiert auf Anfragen nach + example.com + und + www.example.com +

  • + test.com +: Reagiert auf Anfragen nach + test.com + und + www.test.com +

  • + default +: Reagiert auf alle Anfragen an Port 80, die nicht mit den beiden anderen Blöcken übereinstimmen.

Um ein mögliches Problem mit dem Hash-Bucket-Speicher zu vermeiden, das durch das Hinzufügen zusätzlicher Servernamen entstehen kann, werden wir fortfahren und einen einzelnen Wert in unserer Datei + / etc / nginx / nginx.conf + anpassen. Öffne die Datei jetzt:

sudo nano /etc/nginx/nginx.conf

Suchen Sie in der Datei die Direktive + server_names_hash_bucket_size +. Entfernen Sie das "+ # +" - Symbol, um die Zeile zu entfernen:

/etc/nginx/nginx.conf

http {
   . . .

   server_names_hash_bucket_size 64;

   . . .
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Stellen Sie als Nächstes sicher, dass in keiner Ihrer Nginx-Dateien Syntaxfehler enthalten sind:

sudo nginx -t

Wenn keine Probleme gefunden wurden, starten Sie Nginx neu, um Ihre Änderungen zu aktivieren:

sudo systemctl restart nginx

Nginx sollte nun beide Domainnamen bedienen.

Fünfter Schritt: Ändern Sie Ihre lokale Hosts-Datei zum Testen (optional)

Wenn Sie keine Domänennamen verwendet haben, deren Eigentümer Sie sind, und stattdessen Dummy-Werte verwendet haben, können Sie die Konfiguration Ihres lokalen Computers so ändern, dass Sie die Nginx-Serverblockkonfiguration vorübergehend testen können.

Auf diese Weise können andere Besucher Ihre Site nicht korrekt anzeigen, Sie können jedoch jede Site einzeln erreichen und Ihre Konfiguration testen. Dies funktioniert im Wesentlichen, indem Anforderungen abgefangen werden, die normalerweise an DNS gesendet werden, um Domänennamen aufzulösen. Stattdessen können wir die IP-Adressen festlegen, zu denen unser lokaler Computer gehen soll, wenn wir die Domänennamen anfordern.

Note

Wenn Sie sich zu Hause auf einem Mac- oder Linux-Computer befinden, können Sie die erforderliche Datei bearbeiten, indem Sie Folgendes eingeben:

sudo nano /etc/hosts

Unter Windows können Sie hier Anweisungen zum Ändern der Hosts-Datei finden.

Sie müssen die öffentliche IP-Adresse Ihres Servers und die Domänen kennen, die Sie an den Server weiterleiten möchten. Angenommen, die öffentliche IP-Adresse meines Servers lautet "+ 203.0.113.5 +", dann sehen die Zeilen, die ich meiner Datei hinzufügen würde, ungefähr so ​​aus:

/ etc / hosts

127.0.0.1   localhost
. . .

Dadurch werden alle Anforderungen für "+ example.com " und " test.com +" abgefangen und an Ihren Server gesendet. Dies ist unser Wunsch, wenn wir die von uns verwendeten Domains nicht besitzen.

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Schritt Sechs: Testen Sie Ihre Ergebnisse

Nachdem Sie alle Einstellungen vorgenommen haben, sollten Sie testen, ob Ihre Serverblöcke ordnungsgemäß funktionieren. Sie können dies tun, indem Sie die Domains in Ihrem Webbrowser besuchen:

http://

Sie sollten eine Seite sehen, die so aussieht:

Wenn Sie Ihren zweiten Domainnamen besuchen, sollte eine etwas andere Site angezeigt werden:

http://

Wenn diese beiden Sites funktionieren, haben Sie zwei unabhängige Serverblöcke mit Nginx erfolgreich konfiguriert.

Wenn Sie zu diesem Zeitpunkt die Datei "+ hosts +" auf Ihrem lokalen Computer zum Testen angepasst haben, möchten Sie wahrscheinlich die hinzugefügten Zeilen entfernen.

Wenn Sie für eine öffentlich zugängliche Site einen Domainnamenzugriff auf Ihren Server benötigen, möchten Sie wahrscheinlich für jede Ihrer Sites einen Domainnamen erwerben. Hier erfahren Sie, wie Sie https://www.digitalocean.com/community/articles/how-to-set-up-a-host-name-with-digitalocean[set-up-a-host-name-up-up-up-up-a-host-name-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-up-

Fazit

Sie sollten nun die Möglichkeit haben, Serverblöcke für jede Domain zu erstellen, die Sie auf demselben Server hosten möchten. Die Anzahl der Serverblöcke, die Sie erstellen können, ist nicht wirklich begrenzt, solange Ihre Hardware den Datenverkehr verarbeiten kann.