Nginx

Nginx-Reverse-Proxy

Nginx-Reverse-Proxy

Was ist ein Reverse-Proxy??

Ein Proxyserver ist derjenige, der in Ihrem Namen mit dem Internet kommuniziert. Zum Beispiel, wenn das Netzwerk Ihrer Hochschule https://www . blockiert hat.Facebook.com/, aber die Domain  https://exampleproxy.com noch erreichbar ist, dann können Sie letzteren besuchen und er leitet alle Ihre Anfragen für Facebook-Server an Facebook weiter und sendet die Antworten von Facebook zurück an Ihren Browser.

Um es noch einmal zusammenzufassen, ein Proxy sendet Anfragen im Namen eines oder mehrerer Clients an beliebige Server im Internet. Ein Reverse-Proxy verhält sich ähnlich.

EIN Reverse-Proxy empfängt Anfragen von allen Kunden im Namen von einem oder mehreren Server. Wenn Sie also ein paar Server haben, die ww1 hosten.Beispiel.com und ww2.Beispiel.com kann ein Reverse-Proxy-Server Anfragen im Namen der beiden Server annehmen, diese Anfragen an ihre jeweiligen Endpunkte weiterleiten, wo die Antwort generiert und an den Reverse-Proxy zur Weiterleitung an die Clients zurückgesendet wird.

Die Einrichtung

Bevor wir anfangen, Nginx-Konfigurationsdateien zu optimieren und einen Reverse-Proxy-Server zu erstellen. Ich möchte in Stein gemeißelt sein, wie mein Setup aussieht. Wenn Sie also versuchen, Ihr Design zu implementieren, wäre es weniger verwirrend.

Ich habe die Plattform von DigitalOcean verwendet, um drei VPS zu starten. Sie befinden sich alle im selben Netzwerk mit jeweils einer eigenen privaten IP, und nur ein VPS hat eine statische öffentliche IP (Dies wird unser Reverse-Proxy-Server sein.)

VM/Hostname Private IP Öffentliche IP Rolle
Reverseproxy 10.135.123.187 159.89.108.14 Reverse-Proxy mit Nginx
Knoten-1 10.135.123.183 N / A Betrieb der ersten Website
Knoten-2 10.135.123.186 N / A Zweite Website betreiben

Die beiden verschiedenen Websites, die ausgeführt werden, haben Domainnamen ww1.ranvirslog.com und ww2.ranvirslog.com und ihre beiden A-Records verweisen auf die öffentliche IP des Reverseproxys, d. h.e, 159.89.108.14

Die Idee hinter der privaten IP ist, dass die drei VMs über diese private IP miteinander kommunizieren können, ein Remote-Benutzer jedoch nur auf die Reverse-Proxy-VM zugreifen kann an seiner öffentlichen IP. Das ist wichtig zu bedenken. Sie können beispielsweise keine SSH-Verbindung mit einer der VMs mit ihrer privaten IP-Adresse herstellen.

Darüber hinaus verfügen sowohl Node-1 als auch Node-2 über einen Apache-Webserver, der zwei unterschiedliche Webseiten bedient. Dies wird uns helfen, das eine vom anderen zu unterscheiden.

Die erste Website sagt "WEBSITE 1 WORKS"!!!”

Ähnlich zeigt die zweite Website dies:

Ihre Websites können sich unterscheiden, aber wenn Sie dieses Setup als Ausgangspunkt replizieren möchten, führen Sie apt install apache2 auf Node-1 und Node-2 aus. Bearbeiten Sie dann die Datei /var/www/html/index.html, damit der Webserver sagt, was immer Sie sagen wollen.

Die Reverseproxy-VM ist noch unberührt. Auf allen VMs läuft Ubuntu 18.04 LTS, aber Sie können jedes andere Betriebssystem verwenden, das Sie möchten. Sie können dies sogar mit Docker-Containern emulieren. Indem Sie ein benutzerdefiniertes Docker-Bridge-Netzwerk erstellen und darin Container spawnen, können Sie jedem Container eine private IP zuweisen und den gesamten HTTP/HTTPS-Proxy an einen Container weiterleiten, der unser Nginx-Reverse-Proxy-Container wäre.

So weit, ist es gut.

Nginx-Standardkonfiguration

Beginnen wir mit der Installation von Nginx auf dem Reverseproxy-Server. Ich verwende Ubuntu, also ist apt mein Paketmanager:

$ sudo apt install nginx

Entfernen der Standardkonfiguration, wenn Sie eine Debian-basierte Distribution verwenden

Bevor wir weitermachen, eine kleine Anmerkung zur Konfiguration von Nginx. Alle verschiedenen Konfigurationsdateien werden in /etc/nginx gespeichert, einschließlich der nginx.conf-Datei, die die Hauptkonfigurationsdatei ist. Wenn wir uns den Inhalt dieser Datei (innerhalb des http-Blocks) ansehen, werden Sie die folgenden zwei Zeilen bemerken:


einschließen /etc/nginx/conf.t/*.conf;
include /etc/nginx/sites-enabled/*;

Die zweite Zeile enthält alle Dateien im Sites-enabled-Verzeichnis zur Konfiguration von Nginx. Dies ist die Standardpraxis bei den meisten Debian-basierten Distributionen. Zum Beispiel hat die Standardwebseite „Willkommen bei Nginx“ eine entsprechende Datei namens default am Ort /etc/nginx/sites-available/default mit einem Symlink zu /etc/nginx/sites-enabled/, aber wir brauchen diese nicht Standard-Webseite, damit wir den Symlink sicher entfernen können. Das Original ist noch im Verzeichnis Sites-Verfügbar verfügbar.

$rm /etc/nginx/sites-enabled/default

Aber wenn wir eine Reverse-Proxy-Konfiguration erstellen, werden wir dies in conf . tun.d-Verzeichnis (wobei unser Dateiname a .conf-Erweiterung) das ist universell, und funktioniert über alle Distributionen hinweg nicht nur Debian oder Ubuntu.

Entfernen der Standardkonfiguration für andere Distributionen

Wenn Sie keine Debian-basierte Distribution verwenden, finden Sie die Standardeinstellung Startseite Konfiguration unter /etc/nginx/conf.d/Standard.conf verschieben Sie die Datei einfach an einen sicheren Ort, wenn Sie sie in Zukunft verwenden möchten (da dies kein Symlink ist)

$ mv /etc/nginx/conf.d/Standard.conf ~/default.conf

Es kann manchmal in /etc/nginx/default gefunden werden.d weil sich die Leute einfach nicht auf einen einzigen einfachen Standard einigen können! Sie müssten also ein wenig im Verzeichnis /etc/nginx graben, um dies herauszufinden.

Hinzufügen von Reverse-Proxy-Blöcken

Wie bereits erwähnt, sind die zwei verschiedenen Domainnamen, die ich hinter diesem Proxy hoste,

  1. ranvirslog.com (WEBSITE 1) mit IP 10.135.123.183
  2. ranvirslog.com (WEBSITE 2) mit IP 10.135.123.186

Erstellen wir also eine Datei pro Website in /etc/nginx/conf.d/ Ordner. Wir sind also gut organisiert.

$ berühren /etc/nginx/conf.d/ww1.conf
$ berühren /etc/nginx/conf.d/ww2.conf

Sie können die Dateien beliebig benennen, solange sie ein it .conf am Ende des Namens.

In der ersten Datei ww1.conf folgende Zeilen hinzufügen:

Server
hören 80;
zuhören [::]:80;
 
Servername ww1.ranvirslog.com;
 
Lage /
proxy_pass http://10.135.123.183/;
proxy_buffering aus;
proxy_set_header X-Real-IP $remote_addr;

Die Listen-Anweisungen weisen Nginx an, Port 80 sowohl für IPv4- als auch für IPv6-Fälle abzuhören. Es prüft dann, ob der server_name ww1 ist.ranvirslog.com, dann tritt der Standortblock ein und leitet die Anfrage an http://10 . weiter.135.123.183/ mit ausgeschalteter Pufferung. Darüber hinaus sorgt die Zeile proxy_set_header… dafür, dass die ursprüngliche IP des Clients an den Proxy-Server weitergeleitet wird. Dies ist hilfreich, wenn Sie die Anzahl der einzelnen Besucher usw. berechnen möchten. Andernfalls hätte der Proxy-Server nur einen Besucher - den Nginx-Server.

Die Optionen buffering und set_header sind komplett optional und werden nur hinzugefügt, um das Proxying so transparent wie möglich zu machen. Für das ww2.ranvirslog.com-Website habe ich die folgende Konfiguration unter /etc/nginx/conf . hinzugefügt.d/ww2.conf:

Server
hören 80;
zuhören [::]:80;
 
Servername ww2.ranvirslog.com;
 
Lage /
proxy_pass http://10.135.123.186/;
proxy_buffering aus;
proxy_set_header X-Real-IP $remote_addr;

Speichern Sie beide Dateien und testen Sie, ob die Gesamtkonfiguration gültig ist oder nicht:

$ sudo nginx -t

Wenn Fehler auftreten, hilft Ihnen die Ausgabe des obigen Befehls, diese zu finden und zu beheben. Starten Sie nun den Server neu:

$ service nginx neu starten

Und Sie können testen, ob es funktioniert hat oder nicht, indem Sie die verschiedenen Domainnamen in Ihrem Browser aufrufen und das Ergebnis sehen.

Fazit

Der Anwendungsfall jedes Einzelnen ist anders. Die oben erwähnte Konfiguration erfordert möglicherweise einige Anpassungen, um für Ihr Szenario zu funktionieren. Vielleicht betreiben Sie mehrere Server auf demselben Host, aber an verschiedenen Ports, in diesem Fall hat die Zeile proxy_pass… http://localhost:portNumber/ als Wert.

Diese Details hängen stark von Ihrem Anwendungsfall ab. Weitere Informationen zu anderen Optionen und Tuneables finden Sie in den offiziellen Nginx-Dokumenten.

So ändern Sie Mauszeiger- und Cursorgröße, Farbe und Schema unter Windows 10
Der Mauszeiger und der Cursor in Windows 10 sind sehr wichtige Aspekte des Betriebssystems. Dies kann auch für andere Betriebssysteme gesagt werden, a...
Kostenlose und Open-Source-Spiele-Engines für die Entwicklung von Linux-Spielen
Dieser Artikel behandelt eine Liste von kostenlosen und Open-Source-Spiele-Engines, die für die Entwicklung von 2D- und 3D-Spielen unter Linux verwend...
Shadow of the Tomb Raider für Linux Tutorial
Shadow of the Tomb Raider ist die zwölfte Erweiterung der Tomb Raider-Reihe – ein Action-Adventure-Franchise von Eidos Montrealdos. Das Spiel wurde vo...