Eine kurze Diskussion über den magischen Schrägstrich im Nginx Reverse Proxy

Eine kurze Diskussion über den magischen Schrägstrich im Nginx Reverse Proxy

Beim Konfigurieren des Nginx-Reverse-Proxys können die Schrägstriche in location und proxy_pass verschiedene Probleme verursachen. Manchmal führt ein Schrägstrich mehr oder weniger zu völlig anderen Ergebnissen. Daher haben wir die Situationen mit und ohne Schrägstriche nach location und proxy_pass speziell angeordnet und kombiniert und einen vollständigen Test durchgeführt, um das Prinzip herauszufinden und unsere Haltung zu verbessern~

0. Umweltinformationen

Zwei Nginx-Server

nginx A: 192.168.1.48

nginx B: 192.168.1.56

1. Testmethode

Konfigurieren Sie verschiedene Regeln in nginx A und fordern Sie dann nginx A an: http://192.168.1.48/foo/api

Beobachten Sie die von nginx B empfangene Anfrage, indem Sie das Feld $request im Protokoll betrachten

2. Testablauf und Ergebnisse

Fall 1

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/;
}

Von nginx B empfangene Anfrage: /api

Fall 2

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/;
}

Von nginx empfangene Anfrage B: //api

Fall 3

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/;
}

Von nginx B empfangene Anfrage: /foo/api

Fall 4

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/;
}

Von nginx B empfangene Anfrage: /foo/api

Fall 5

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/bar/;
}

Von nginx B empfangene Anfrage: /bar/api

Fall 6

nginx Eine Konfiguration:

Standort /foo {
  Proxy-Passwort http://192.168.1.56/bar/;
}

Von nginx B empfangene Anfrage: /bar//api

Fall 7

nginx Eine Konfiguration:

Standort /foo/ {
  Proxy-Passwort http://192.168.1.56/bar;
}

Von nginx B empfangene Anfrage: /barapi

Fall 8

nginx Eine Konfiguration:

Standort /foo {
  Proxy-Passwort http://192.168.1.56/bar;
}

Von nginx B empfangene Anfrage: /bar/api

Ist Ihnen schwindlig, wenn Sie das sehen? Tatsächlich gibt es ein Muster.

Ordnen Sie diese Fälle nun in einer Tabelle an. Das Ergebnis zeigt die von nginx B empfangene Anfrage.

Tabelle 1

Fall Standort Proxy-Passwort Ergebnis
1 /foo/ http://192.168.1.48/ /API
2 /foo http://192.168.1.48/ //API
3 /foo/ http://192.168.1.48 /foo/api
4 /foo http://192.168.1.48 /foo/api

Tabelle 2

Fall Standort Proxy-Passwort Ergebnis
5 /foo/ http://192.168.1.48/bar/ /bar/api
6 /foo http://192.168.1.48/bar/ /bar//api
7 /foo/ http://192.168.1.48/bar /barapi
8 /foo http://192.168.1.48/bar /bar/api

3. Analyse

Ursprünglicher Anforderungspfad: Dieser Artikel verwendet denselben Namen wie „/foo/api“

Standort: Die Spalte „Standort“ in der Tabelle oben

proxy_pass: Die Spalte proxy_pass in der Tabelle oben

Neuer Anforderungspfad: die Zeichenfolge, nachdem nginx den ursprünglichen Anforderungspfad verarbeitet hat

Konzentrieren Sie sich auf die Analyse von Proxy_Pass, das in drei Formen unterteilt werden kann

Anschließend wird die Zeichenfolge in zwei Kategorien eingeteilt, je nachdem, ob auf sie IP:Port folgt. „/“ ist auch eine Zeichenfolge, daher wird 1 in eine Kategorie eingeteilt und 2 und 3 in eine Kategorie. Im Folgenden werden diese beiden Kategorien erläutert.

Wenn auf den Proxy-Pass „IP:Port“ kein String folgt, leitet Nginx den ursprünglichen Anforderungspfad unverändert an den nächsten Nginx weiter, wie in den Fällen 3 und 4.

Wenn nach der IP:Port-Adresse von Proxy_Pass eine Zeichenfolge hinzugefügt wird, entfernt Nginx den Speicherort aus dem ursprünglichen Anforderungspfad, verknüpft die verbleibende Zeichenfolge mit Proxy_Pass, um einen neuen Anforderungspfad zu generieren, und leitet den neuen Anforderungspfad dann an die nächste Nginx-Station weiter (die obige Situation ist eigentlich dieselbe wie diese, außer dass die entfernte Zeichenfolge eine leere Zeichenfolge ist~~)

Nehmen wir das verwirrendste Beispiel: Fall 7. Auf die IP:Port von proxy_pass folgt die Zeichenfolge „/bar“, sodass der Speicherort „/foo/“ aus dem ursprünglichen Anforderungspfad „/foo/api“ entfernt wird und zu „api“ wird. Anschließend wird „api“ mit proxy_pass: http://192.168.1.48/bar verknüpft, um eine neue Anforderungs-URL zu generieren: „http://192.168.1.48/barapi“, sodass die von nginx beim nächsten Stopp empfangene Anforderung „/barapi“ lautet.

Fall 6: Auf die IP:Port-Angabe von Proxy_Pass folgt die Zeichenfolge „/bar/“, sodass der Speicherort „/foo“ aus dem ursprünglichen Anforderungspfad „/foo/api“ entfernt und zu „/api“ wird. Anschließend wird „/api“ mit Proxy_Pass: http://192.168.1.48/bar/ verknüpft, um einen neuen Anforderungspfad zu generieren: „http://192.168.1.48/bar//api“, sodass die von Nginx beim nächsten Stopp empfangene Anforderung /bar//api lautet.

Das Gleiche gilt auch für andere Fälle. Jetzt verstehe ich es endlich und muss nicht mehr verwirrt sein.

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:
  • Eine kurze Diskussion über den siebenschichtigen Reverse-Proxy und Lastenausgleich von Nginx
  • Detaillierte Erläuterung des Nginx-Reverse-Proxys zur Implementierung der Kibana-Anmeldeauthentifizierungsfunktion
  • Detaillierte Erläuterung mehrerer Möglichkeiten zum Schreiben eines dynamischen DNS-Reverse-Proxys für Nginx
  • So verwenden Sie Nginx als Reverse-Proxy für Node.js
  • Methode und Vorsichtsmaßnahmen für die Bindung sekundärer Domänennamen beim Nginx-Reverse-Proxy
  • CentOS-Methode zur Implementierung des Lastenausgleichs basierend auf dem Nginx-Reverse-Proxy
  • Zwei Möglichkeiten zur Implementierung des Nginx https Reverse Proxy Tomcat
  • Beispielcode zur Implementierung der IP-Zugriffsumleitung durch den Nginx-Reverseproxy
  • PHP verwendet Nginx zur Implementierung eines Reverse-Proxys
  • Nginx Reverse-Proxy und Cache und Cache-Löschmethode

<<:  MySQL-Daemon konnte nicht gestartet werden – Fehlerlösung

>>:  WeChat-Applet-Canvas implementiert Signaturfunktion

Artikel empfehlen

Tutorial zur Installation und Konfiguration der Version MySQL 5.7.23

Ich habe drei Stunden gebraucht, um MySQL selbst ...

3 Codes zur automatischen Aktualisierung von Webseiten

Tatsächlich ist es sehr einfach, diesen Effekt zu ...

Erstellen Sie ein Docker-Image mit Dockerfile

Inhaltsverzeichnis Erstellen Sie ein Docker-Image...

Docker-Image-Zugriff auf den lokalen Elasticsearch-Port-Vorgang

Wenn Sie den vom Docker-Stack bereitgestellten Im...

Vue führt eine Überprüfung durch, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

Was ist Software 404 und 404-Fehler und was ist der Unterschied zwischen ihnen

Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...

So erstellen Sie MySQL-Indizes richtig

Die Indizierung ähnelt dem Erstellen bibliografis...

JavaScript Canvas realisiert farbenfrohen Sonnenhalo-Effekt

In diesem Artikelbeispiel wird der spezifische Co...

Lösen Sie das Problem der Verwendung von weniger in Vue

1. Installieren Sie weniger Abhängigkeiten: npm i...

Beispiel für Formularaktion und „onSubmit“

Erstens: Aktion ist ein Attribut des Formulars. HT...