Detaillierte Erklärung des durch einen Schrägstrich / verursachten Mordes in Nginx proxy_pass

Detaillierte Erklärung des durch einen Schrägstrich / verursachten Mordes in Nginx proxy_pass

Hintergrund

Ein Nginx-Servermodul muss als Proxy für zwei Server fungieren, daher werden zur Unterscheidung und Weiterleitung an die verschiedenen Server unterschiedliche Standortpfade verwendet.

Das steht am Anfang geschrieben

Standort / {
   Proxy-Passwort http://server1/;
}

Standort /Index {
   Proxy-Passwort http://server2/;
}

Ich habe jedoch vergessen, dass es auf Server1 einen Dienstpfad /indexNew gibt, sodass dieser auf Server1 weitergeleitet wurde, was zu einem 404-Problem führte. Dann habe ich die Konfiguration dringend wie folgt geändert:

Standort /indexNeu {
   Proxy-Passwort http://server1/;
}

Standort / {
   Proxy-Passwort http://server1/;
}

Standort /Index {
   Proxy-Passwort http://server2/;
}

Problemphänomen

Als Ergebnis erreicht die Anforderung Server1, aber die Fehlermeldung lautet „POST wird nicht unterstützt“.

{
	"Status": 500,
	"Nachricht": "http://172.28.72.117/-Anforderungsmethode 'POST' nicht unterstützt",
	"Ergebnis": {}
}

Dies war der Fehler, der zu diesem Zeitpunkt von der Anwendung zurückgegeben wurde. Ich habe nginx überprüft und es gab auch keinen Fehler. Es war sehr seltsam. Ich habe im Code gesehen, dass /indexNew tatsächlich die POST-Methode war. Warum wurde also ein Fehler gemeldet, der besagte, dass es nicht unterstützt wird?

Hier ist zunächst die Reihenfolge der Übereinstimmung der verschiedenen Methoden zum Schreiben von Standorten in nginx:

analysieren

Es gibt keinen Fehler im Nginx-Protokoll. Versuchen Sie daher, das Paket von Nginx zur Anwendung zu erfassen

Erfassen von Paketen mit dem Befehl tcpdump

tcpdump -w dataAll_normal.pcap -i eth0 -s0 Port 8888

Ähnlich wie beim obigen Befehl zum Erfassen des Pakets wird durch Wireshark festgestellt, dass überhaupt keine mit /indexNew in Zusammenhang stehenden HTTP-Verkehrspakete gefunden werden.

Versuchen Sie, den Standort wie folgt zu ändern

Standort /indexNeu {
   Proxy-Passwort http://server1;
}

Standort / {
   Proxy-Passwort http://server1/;
}

Standort /Index {
   Proxy-Passwort http://server2/;
}

Der einzige Unterschied besteht darin, dass der letzte Schrägstrich / in proxy_pass von /indexNew entfernt wird. Erfassen Sie weiterhin Pakete und stellen Sie fest, dass das /indexNew-Paket durchsucht werden kann

Dies zeigt an, dass die Änderung korrekt ist.

Ändern Sie den Fehler weiter zurück und versuchen Sie, das Paket zu erfassen, aber Sie können immer noch nicht nach dem /indexNew-Paket suchen. Führen Sie dann ein Remote-Debugging der Anwendung über die IDE durch

Ich habe festgestellt, dass in der URL der Anwendung kein /indexNew vorhanden war, daher konnte ich es natürlich nicht im Wireshark-Paket finden. . .

Dies liegt daran, dass der Zugriffspfad nur / ist, wenn nginx die Anwendung weiterleitet.

Die Schnittstelle mit dem Anforderungspfad / im Projekt ist in der Tat die GET-Methode

Schauen Sie sich die Syntax von proxy_pass im Standort genauer an. Sie ist tatsächlich so. Am Ende von proxy_pass steht ein /, das den Pfad am entsprechenden Standort entfernt und den nachfolgenden URL-Pfad zum Weiterleiten abfängt.

Daher müssen wir auf die Bedeutung des letzten / in proxy_pass achten und es mit Vorsicht verwenden. Es ändert die Pfadanforderungsinformationen, anstatt 100 % der Informationen weiterzuleiten.

Dies ist das Ende dieses Artikels über den blutigen Fall, der durch einen Schrägstrich / in Nginx proxy_pass verursacht wurde. Weitere verwandte Inhalte zum Schrägstrich von Nginx proxy_pass finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder stöbern Sie weiter in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass nach dem Domänennamen zwei Schrägstriche // erscheinen, wenn nginx für den Domänennamenzugriff konfiguriert ist
  • Probleme mit Nginx-URLs, die automatisch Schrägstriche und 301-Weiterleitungen hinzufügen
  • So lösen Sie das Problem, dass der WordPress-Pfad im Nginx-Server nicht automatisch Schrägstriche hinzufügt
  • Lösung für das Problem der automatischen Backslash-Dekodierung bei Nginx
  • Detaillierte Erklärung des Schrägstrichs (/) in nginx

<<:  Detaillierte Erklärung zum manuellen Bereitstellen einer Remote-MySQL-Datenbank unter Linux

>>:  JS realisiert Bild Digitaluhr

Artikel empfehlen

So zeigen Sie die Ausführungszeit von MySQL-Anweisungen über Query Profiler an

Im vorherigen Artikel wurden zwei Methoden zum Üb...

Detaillierte Erklärung der Tomcat-Verzeichnisstruktur

Inhaltsverzeichnis Verzeichnisstruktur bin-Verzei...

24 praktische Tipps zur JavaScript-Entwicklung

Inhaltsverzeichnis 1. Initialisieren Sie das Arra...

Detaillierte Erklärung von Objektliteralen in JS

Inhaltsverzeichnis Vorwort 1. Setzen Sie den Prot...

So überprüfen Sie, ob der Grafiktreiber erfolgreich in Ubuntu installiert wurde

Führen Sie den Befehl aus: glxinfo | grep renderi...

Vue implementiert das Hinzufügen eines Wasserzeicheneffekts zur Seite

Als ich kürzlich an einem Projekt arbeitete, wurd...

Vergleich der JS-Array-Loop-Methode und der Effizienzanalyse

Array-Methoden JavaScript bietet viele Array-Meth...

Natives JS zum Erzielen eines Schiebeknopfeffekts

Der spezifische Code des mit Js erstellten Schieb...

Implementierung von JavaScript zum Herunterladen und Hochladen verknüpfter Bilder

Da wir Bilder hochladen möchten, müssen wir zunäc...

Der Unterschied zwischen HTML-Frame, Iframe und Frameset

10.4.1 Der Unterschied zwischen Frameset und Fram...