Ein Proxy -Server ist derjenige, der in Ihrem Namen mit dem Internet spricht. Zum Beispiel, wenn das Netzwerk Ihres College https: // www blockiert hat.Facebook.com/aber die Domain https: // examproxy.COM ist weiterhin zugänglich, dann können Sie letztere besuchen und alle Ihre Anfragen für Facebook -Server an Facebook weiterleiten und von den Antworten von Facebook an Ihren Browser zurücksenden.
Zusammenfassend sendet ein Proxy Anfragen im Namen eines der weiteren Kunden an Server im Internet. Ein umgekehrter Proxy verhält sich auf ähnliche Weise.
A Reverse Proxy erhält eine Anfrage von allen Kunden im Namen eines oder mehrerer Server. Wenn Sie also ein paar Server haben, die den WW1 veranstalten.Beispiel.com und ww2.Beispiel.com Ein Reverse -Proxy -Server kann Anfragen im Namen der beiden Server annehmen, diese Anfragen an ihre jeweiligen Endpunkte weiterleiten, an denen die Antwort generiert und an den Reverse -Proxy zurückgeschickt wird, um an die Clients zurückzukehren.
Die Einrichtung
Bevor wir beginnen, 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 verbessern. Sie sind alle mit jeweils eine eigene private IP im selben Netzwerk, und nur ein VPS verfügt über eine statische öffentliche IP (dies ist unser Reverse -Proxy -Server.)
VM/Hostname | Private IP | Öffentliche IP | Rolle |
ReverseProxy | 10.135.123.187 | 159.89.108.14 | Reverse Proxy, Nginx ausführen |
Knoten-1 | 10.135.123.183 | N / A | Erste Website ausführen |
Knoten-2 | 10.135.123.186 | N / A | Ausführen der zweiten Website |
Die beiden verschiedenen Websites haben Domain -Namen WW1.Ranvirslog.com Und WW2.Ranvirslog.com und beide Rekorde verweisen auf die öffentliche IP von ReverseProxy, ich.E, 159.89.108.14
Die Idee hinter privater IP ist, dass die drei VMs über diese private IP miteinander sprechen können, aber ein Remote -Benutzer kann nur auf den Reverse Proxy VM zugreifen bei seiner öffentlichen IP. Dies ist wichtig zu beachten. Zum Beispiel können Sie SSH mit seiner privaten IP in keiner der VM in der VM können.
Darüber hinaus haben sowohl Node-1 als auch Node-2 einen Apache-Webserver, der zwei verschiedene Webseiten bedient. Dies wird uns helfen, uns von einem anderen zu unterscheiden.
Auf der ersten Website heißt es: „Website 1 funktioniert!!!”
In ähnlicher Weise 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 apache2 auf Node-1 und Node-2 aus. Bearbeiten Sie dann die Datei/var/www/html/Index.HTML, damit der Webserver alles sagt, was Sie sagen möchten.
Die ReverseProxy VM ist noch unberührt. Alle VMs laufen Ubuntu 18 aus.04 LTS, aber Sie können jedes andere von Ihnen gewünschte Betriebssystem verwenden. Sie können dies sogar mit Docker -Containern emulieren. Durch das Erstellen eines benutzerdefinierten Docker Bridge-Netzwerks und Laichcontainer können Sie jedem Container eine private IP zuweisen und den gesamten HTTP/HTTPS-Proxy einem Container weiterleiten, wodurch 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, sodass APT mein Paketmanager ist:
$ sudo apt install nginx
Bevor wir eine kleine Notiz zur Konfiguration von Nginx weitermachen. Alle verschiedenen Konfigurationsdateien werden in /etc /nginx einschließlich des Nginx gespeichert.Conf -Datei, die die Hauptkonfigurationsdatei ist. Wenn wir uns den Inhalt dieser Datei (im HTTP -Block) ansehen, werden die folgenden zwei Zeilen bemerken:
…
Inhaftieren/etc/nginx/conf.D/*.conf;
include/etc/nginx/sites-fähig/*;
…
Die zweite Zeile enthält alle Dateien im Sites-fähigen Verzeichnis zur Konfiguration des NGINX. Dies ist die Standardpraxis bei den meisten Debian-basierten Verteilungen. Zum Beispiel hat die Standard-Webseite "Willkommen bei Nginx" eine entsprechende Datei mit dem Namen Standard unter dem Speicherort/etc/nginx/sites-verfügbar/standardmäßig mit einem Symlink zu/etc/nginx/sites-fähig/, aber wir brauchen das nicht Standardwebseite, damit wir den Symlink sicher entfernen können. Das Original ist weiterhin auf Websites erhältlich.
$ rm/etc/nginx/sites-fähig/standardmäßig
Aber wenn wir eine Reverse Proxy -Konfiguration erstellen, werden wir dies in Conf tun.d Verzeichnis (mit unserem Dateinamen a .Conf -Erweiterung) Das ist universell, und arbeitet in allen Verteilungen nicht nur Debian oder Ubuntu.
Wenn Sie keine Debian-basierte Distribution verwenden, finden Sie den Standardwert Startseite Konfiguration at/etc/nginx/conf.D/Standard.Conf bewegen Sie einfach die Datei an einen sicheren Ort, wenn Sie sie in Zukunft verwenden möchten (da dies kein Symlink ist)
$ mv/etc/nginx/conf.D/Standard.conf ~/Standard.Conf
Es kann manchmal in/etc/nginx/Standard gefunden werden.D Weil die Leute sich einfach nicht auf einen einzigen einfachen Standard einig sind! Sie müssten also ein bisschen im Verzeichnis /usw. /nginx graben, um dies herauszufinden.
Hinzufügen von umgekehrten Proxyblöcken
Wie bereits erwähnt, sind die beiden verschiedenen Domain -Namen, die ich hinter diesem Proxy hebe
Erstellen wir also eine Datei pro Website in/etc/nginx/conf.D/ Ordner. Also sind wir gut organisiert.
$ touch/etc/nginx/conf.d/ww1.Conf
$ touch/etc/nginx/conf.d/ww2.Conf
Sie können die Dateien benennen, was Sie wünschen, solange sie eine hat .conf am Ende seines Namens.
In der ersten Datei WW1.conf fügen Sie die folgenden Zeilen hinzu:
Server
Hören Sie 80;
Hören Sie [::]: 80;
Server_Name WW1.Ranvirslog.com;
Standort /
proxy_pass http: // 10.135.123.183/;
Proxy_Bufferen;
proxy_set_header x-real-ip $ remote_addr;
In den Anweisungen des Hörens werden NGINX auf Port 80 für IPv4- und IPv6 -Fälle anhören. Es prüft dann, ob der Server_Name WW1 ist.Ranvirslog.com dann ist der Standortblock ein und stellt die Anfrage an http: // 10 an.135.123.183/ mit Pufferung ausgeschaltet. Darüber hinaus stellt die Proxy_Set_Header… stellt sicher, dass die ursprüngliche IP des Clients an den Proxied -Server weitergeleitet wird. Dies ist hilfreich, falls Sie die Anzahl der eindeutigen Besucher usw. berechnen möchten, usw. Andernfalls hätte der Proxied -Server nur einen Besucher - den Nginx -Server.
Die Optionen für Pufferoption und SET_Header sind vollständig optional und werden nur hinzugefügt, um das Proxying so transparent wie möglich zu gestalten. Für den Zweiten Weltkrieg.Ranvirslog.Com -Website habe ich die folgende Konfiguration bei/etc/nginx/conf hinzugefügt.d/ww2.conf:
Server
Hören Sie 80;
Hören Sie [::]: 80;
Server_Name WW2.Ranvirslog.com;
Standort /
proxy_pass http: // 10.135.123.186/;
Proxy_Bufferen;
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 es Fehler gibt, 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 Domain -Namen in Ihrem Browser besuchen und das Ergebnis sehen.
Der Anwendungsfall jedes Einzelnen ist anders. Die oben erwähnte Konfiguration muss möglicherweise ein bisschen angepasst werden, um für Ihr Szenario zu arbeiten. Vielleicht führen Sie mehrere Server auf demselben Host aus, aber an verschiedenen Ports wird in diesem Fall die Proxy_Pass… Line http: // localhost: portnumber/als Wert aufweist.
Diese Details hängen sehr von Ihrem Anwendungsfall ab. Weitere Details zu anderen Optionen und Tuneagres finden Sie in den offiziellen Nginx -Dokumenten.