Beispiel für die Verwendung des Nginx-Reverse-Proxys für Go-FastDFS

Beispiel für die Verwendung des Nginx-Reverse-Proxys für Go-FastDFS

Hintergrund

go-fastdfs ist ein verteiltes Dateisystem, das das HTTP-Protokoll unterstützt. In allgemeinen Projekten wird die Dateisystemadresse selten direkt offengelegt. Die meisten werden durch Software wie nginx umgekehrt. Aufgrund der relativ speziellen Geschäfts- und Netzwerkumgebungsszenarien unseres Unternehmens besteht das Hybrid-Cloud-Netzwerksystem aus einem öffentlichen Netzwerkteil (öffentliche Cloud) und einem Intranetteil (private Cloud). Die öffentliche Cloud dient hauptsächlich als Ausgang und Eingang und führt einige Prüf- und Authentifizierungsanwendungen aus, um Upstream-Anfragen zu verarbeiten, wodurch die Anzahl der Verarbeitungszeiten der privaten Cloud reduziert und die Leistung verbessert wird. Aus diesem Grund muss in einer öffentlichen Netzwerkumgebung ein Reverse-Proxy verwendet werden, um auf die von einer privaten Cloud bereitgestellten Dienste zuzugreifen. Dasselbe gilt für den Zugriff auf das Dateisystem. Wie können wir nginx so konfigurieren, dass externe Netzwerkanforderungen per Reverse-Proxy an go-fastdfs weitergeleitet werden können? Dieser Artikel erklärt es Schritt für Schritt.

Allgemeine Konfiguration

Im Allgemeinen wissen Freunde, die mit Nginx vertraut sind, dass Sie, wenn Sie einen Reverse-Proxy konfigurieren müssen, direkt einen Standortkontext und ein Proxy-Modul schreiben können. Wenn Sie ein benutzerdefiniertes Präfix benötigen, können Sie ein Umschreibmodul verwenden. Ein einfaches Beispiel sieht wie folgt aus:

Standort ~ /dfs/group([0-9]) {
 Proxy-Passwort http://localhost:8080;
 neu schreiben ^/dfs/(.*)$ /$1 break;
 Proxy_set_header Host $host:$server_port;
 Proxy_Set_Header X-Real-IP $Remote_Addr;
 proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
}

An diesem Punkt ist die allgemeine Anti-Generation-Konfiguration in Ordnung, aber ist sie auch für go-fastdfs in Ordnung? Für go-fastdfs ist das allgemeine Hochladen in Ordnung, aber es reicht immer noch nicht für die Wiederaufnahme von Haltepunkten mit tus. Warum? Da der TUS-Server eine 301-Weiterleitung zurückgibt und bestimmte Anforderungsheader übertragen muss, sind spezielle Einstellungen erforderlich.

Unterstützt die Tus Anti-Generation-Konfiguration

Wenn Sie eine TUS-Rückwärtsgenerierung durchführen, die Neuschreibung des 301-Umleitungsstandorts und die Weiterleitung bestimmter Anforderungsheader unterstützen müssen, wie sollten Sie dies konfigurieren? Bitte beachten Sie die folgende Konfiguration

Standort ~ /dfs1/group([0-9]) {
 access_log Protokolle/dfs/access.log Haupt;
 error_log Protokolle/dfs/error.log Fehler;
 umschreiben ^/dfs1/(.*)$ /$1 break;
 Proxy-Passwort http://localhost:8051;

 # Anforderungs- und Antwortpufferung deaktivieren
 Proxy_Request_Buffering aus;
 Proxy-Pufferung aus;
 Proxy_http_Version 1.1;

 Proxy_set_header Host $host:$server_port;
 Proxy_Set_Header X-Real-IP $Remote_Addr;
 proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
 # Wenn Servername kein öffentlicher Domänenname ist, kann dieser Ort auf IP gesetzt werden
 Proxy_set_header X-Weitergeleiteter Host $hostname;
 Proxy_set_header X-Weitergeleitet-Proto $scheme;
 Proxy_Set_Header-Upgrade $http_upgrade;
 proxy_set_header Verbindung "Upgrade";
 # Da Präfix plus Umschreiben verwendet wird, muss der zurückgegebene Speicherort geändert werden, um das Reverse-Proxy-Präfix Proxy_redirect ~^(.*)/group([0-9])/big/upload/(.*) /dfs/group$2/big/upload/$3 hinzuzufügen;
 Client_max_Körpergröße 0;
}

Beachten Sie, dass die beiden oben genannten Konfigurationen proxy_redirect und client_max_body_size sind. Die erste Konfiguration ist darauf zurückzuführen, dass der vom tus-Server zurückgegebene Umleitungsort kein benutzerdefiniertes Präfix enthält. Sie müssen daher selbst ein benutzerdefiniertes Präfix hinzufügen. Hier verwende ich /dfs. Wenn es etwas anderes ist, ändern Sie es einfach. Der zweite Wert ist client_max_body_size. Wenn dieser auf 0 gesetzt ist, bedeutet dies, dass das Problem der zu großen Anfrage unabhängig von der Größe der hochgeladenen Datei nicht gemeldet und die Anfrage direkt weitergeleitet wird. Wenn dieser Wert festgelegt werden muss, legen Sie bitte eine Zahl fest, die größer oder gleich chunkSize ist. Was ist ChunkSize? Es bezieht sich auf die Größe jedes Chunks, wenn der tus-Client in Chunks hochlädt. Weitere Einzelheiten finden Sie in der offiziellen Dokumentation.

Lastenausgleichskonfiguration

Wie erfolgt bei der Konfiguration eines Clusterservers ein Lastenausgleich für Uploads und Downloads? Verwenden Sie nginx zur Rückgenerierung, die mit dem Upstream-Modul erreicht werden kann. Weitere Einzelheiten finden Sie in der folgenden Konfiguration.

upstream dfs_stream {
 Server-Host1:Port;
 Server-Host2:Port;
 ip_hash;
}

Die obige Konfiguration unterscheidet sich nicht vom allgemeinen Lastenausgleich. Das einzige, worauf Sie achten müssen, ist die Konfiguration von ip_hash. Warum? Denn wenn Sie die Breakpoint-Wiederaufnahme verwenden, wird die Datei in Blöcken hochgeladen. Wenn es sich nicht um IP_Hash handelt, werden die ersten paar Teile möglicherweise auf Server A und die letzten paar Teile auf Server B hochgeladen. In diesem Fall ist die Datei nicht vollständig, daher müssen Sie auf dieses Problem achten.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zweier Möglichkeiten zur Implementierung der Sitzungspersistenz im Nginx-Reverse-Proxy
  • Implementierung der Multi-Port-Zuordnung des Nginx-Reverse-Proxys
  • Der Nginx-Reverseproxy leitet Anfragen von Port 80 an 8080 weiter.
  • Nginx Reverse-Proxy-Konfiguration entfernt Präfix
  • Detaillierte Erklärung des Nginx Reverse-Proxy-Beispiels

<<:  JavaScript zum Erreichen eines einfachen Bildwechsels

>>:  MySQL 5.7.21 Installations- und Konfigurations-Tutorial

Artikel empfehlen

jQuery-Plugin zur Implementierung des Minesweeper-Spiels (3)

In diesem Artikel wird der dritte Artikel zur Ver...

Detaillierte Erklärung der Rolle von Klammern in AngularJS

1. Die Rolle der Klammern 1.1 Eckige Klammern [ ]...

Verwenden des CSS-Loaders zum Implementieren des CSS-Moduls in Vue-CLI

【Vorwort】 Sowohl die modularen CSS-Lösungen von V...

Wie viele gängige Schleifen zur Array-Traversierung in JS kennen Sie?

Vorwort Als grundlegende Datenstruktur spielen Ar...

Bootstrap 3.0 Studiennotizen Grid-System-Fall

Vorwort Im vorherigen Artikel haben wir hauptsäch...

Schreiben und Verstehen von Pfeilfunktionen und diesem in JS

Inhaltsverzeichnis Vorwort 1. So schreiben Sie Fu...

Beispiele für die Verwendung von Docker und Docker-Compose

Docker ist eine Open-Source-Container-Engine, mit...

Detaillierte Erklärung des HTML-Bereichs-Tags

Der <area>-Tag definiert einen Bereich in e...

Detaillierte Erklärung zur Verwendung von MySQL, wobei

Inhaltsverzeichnis 1. Einleitung 2. Haupttext 2.1...

So passen Sie die Höhe eines Divs an die Höhe des Browsers an

Diese alte Frage hat unzählige Frontend-Entwickler...

Detailliertes Beispiel zum Entfernen doppelter Daten in MySQL

Detailliertes Beispiel zum Entfernen doppelter Da...

js, um die Funktion zum Hochladen von Bildern zu realisieren

Das Prinzip des Hochladens von Bildern auf dem Fr...

Vue + Element dynamische Mehrfachheader und dynamische Slots

Inhaltsverzeichnis 1. Nachfrage 2. Wirkung 3. All...

CSS3-Übergang zum Erreichen des unterstrichenen Beispielcodes

In diesem Artikel wird der Beispielcode für den C...