Proxy_pass-Methode in mehreren if in Nginx-Standorten

Proxy_pass-Methode in mehreren if in Nginx-Standorten

1. Lassen Sie uns zunächst das relevante Wissen zum Standort in Nginx überprüfen

1) Anweisungen zur Standortübereinstimmung:

  • ~ #Die Wellenlinie zeigt eine reguläre Übereinstimmung an, Groß- und Kleinschreibung wird beachtet
  • ~* # zeigt an, dass ein regulärer Abgleich durchgeführt werden soll, ohne Berücksichtigung der Groß- und Kleinschreibung
  • ^~ #^~ zeigt eine allgemeine Zeichenübereinstimmung an, keine reguläre Übereinstimmung. Wenn diese Option übereinstimmt, wird nur diese Option abgeglichen und keine anderen Optionen. Sie wird im Allgemeinen zum Abgleichen von Verzeichnissen verwendet.
  • = # Führen Sie eine exakte Übereinstimmung gemeinsamer Zeichen durch
  • @ #"@" definiert einen benannten Ort, der für internes Targeting verwendet wird, wie etwa error_page, try_files

2) Die Priorität der Standortübereinstimmung (unabhängig von der Reihenfolge der Standorte in der Konfigurationsdatei)

1.= Genaue Übereinstimmungen werden zuerst verarbeitet. Wenn eine exakte Übereinstimmung gefunden wird, beendet nginx die Suche nach weiteren Übereinstimmungen.
2. Normale Zeichenübereinstimmungen, Regeln für reguläre Ausdrücke und Regeln für lange Blöcke haben Vorrang vor Abfrageübereinstimmungen. Das heißt, wenn das Element übereinstimmt, muss auch geprüft werden, ob eine Übereinstimmung mit regulären Ausdrücken und eine längere Übereinstimmung vorliegt.
3.^~ Nur diese Regel wird erfüllt, und nginx beendet die Suche nach anderen Übereinstimmungen. Andernfalls verarbeitet nginx weiterhin andere Standortanweisungen.
4. Schließlich werden die Anweisungen mit „~“ und „~*“ abgeglichen. Wenn eine entsprechende Übereinstimmung gefunden wird, beendet nginx die Suche nach weiteren Übereinstimmungen. Wenn kein regulärer Ausdruck vorhanden ist oder kein regulärer Ausdruck übereinstimmt, wird die wörtliche Übereinstimmungsanweisung mit dem höchsten Übereinstimmungsgrad verwendet.

2. Proxy_pass in mehreren ifs in nginx:

Server {
hören Sie 127.0.0.1:80;
    setze $test A; 
  
    setze $testB B;
    Standort / {
      wenn ($test ~* "A") { 
         Proxy-Passwort http://www.so.com; 
         brechen; 
      } 
      if ($testB ~* "B") { 
         Proxy-Passwort http://www.sogou.com; 
         #brechen; 
      } 
    }
}

Ich hoffe, ein bestimmtes Proxy-Passwort verwenden zu können, wenn eine bestimmte Bedingung erfüllt ist. Wenn jedoch mehrere if-Anweisungen erfüllt sind, wie im obigen Beispiel: Wenn in der ersten if-Anweisung kein Break vorhanden ist, wird Folgendes ausgeführt; um proxy_pass nach der ersten Übereinstimmung auszuführen, kann ein Break hinzugefügt werden. (Es scheint keine solche Anweisung wie if else in nginx zu geben)

3. Bestimmen Sie die Parameter für verschiedene Proxy-Passwörter:

Beim Umschreiben ist nur eine Übereinstimmung nach URL-Pfad möglich, nicht nach Parametern. Wenn Sie also eine Parameterbeurteilung implementieren möchten, müssen Sie $arg_parameter verwenden.

Standort / {
    Stamm-HTML;
    index.html index.htm index.php;
    Proxy_Redirect aus;
    proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
    Proxy_Set_Header X-Real-IP $Remote_Addr;
    Proxy_set_header Host $http_host;
    Proxy_http_Version 1.1;
    proxy_set_header Verbindung "";

    wenn ( $query_string ~* "usg=0" ) {
      Proxy-Passwort http://local_workera;
    }

    wenn ( $query_string ~* "usg=1" ) {
      Proxy-Passwort http://local_workerb;
    }

    wenn ( $arg_uid ~* "(.*[AB]$)" ) {
  Proxy-Passwort http://local_workerf;
    }

    Proxy-Passwort http://local_workera;
}

1) Die beiden Parameter usg=0 und usg=1 im Anforderungspfad sind festgelegt, sodass $query_string für die reguläre Übereinstimmung verwendet wird; (der Wert von $query_string entspricht allen Parametern in der Anforderung)

2) Wenn wir als Nächstes die Anforderung, deren UID-Wert mit A oder B endet, zur Verarbeitung an local_workerf übertragen möchten, können wir $query_string derzeit nicht für die reguläre Übereinstimmung verwenden (da es nicht einfach ist, /?uid=1A&t=1&usg=1 und /?uid=123&t=A&usg=0 abzugleichen). Derzeit können wir nur $arg_uid für die reguläre Übereinstimmung verwenden.

3) Da sich die beiden Parameter usg=0 und usg=2 gegenseitig ausschließen, können sie gemäß der Logik der if-Anweisung an der obigen Stelle ohne Unterbrechung korrekt verarbeitet und oben platziert werden. Da es beim UID-Abgleich zu Konflikten mit USG kommt, kann es nur unten platziert oder mit einem Umbruch versehen werden, d. h.:

Standort / {
    Stamm-HTML;
    index.html index.htm index.php;
    Proxy_Redirect aus;
    proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
    Proxy_Set_Header X-Real-IP $Remote_Addr;
    Proxy_set_header Host $http_host;
    Proxy_http_Version 1.1;
    proxy_set_header Verbindung "";
 
 wenn ( $arg_uid ~* "(.*[AB]$)" ) {
  Proxy-Passwort http://local_workerf;
  brechen;
    }

    wenn ( $query_string ~* "usg=0" ) {
      Proxy-Passwort http://local_workera;
    }

    wenn ( $query_string ~* "usg=1" ) {
      Proxy-Passwort http://local_workerb;
    }

    Proxy-Passwort http://local_workera;
}

Dies ist das Ende dieses Artikels über die Proxy_Pass-Methode in mehreren Ifs im Nginx-Speicherort. Weitere relevante Inhalte zum Proxy_Pass-Speicherort im Nginx-Speicherort finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der verschiedenen Verwendungen von proxy_pass in nginx
  • Zusammenfassung der Konfigurationsprobleme von Nginx-Standort und Proxy-Pass-Pfad
  • Detaillierte Erklärung des Unterschieds zwischen URL-Endungen mit / und ohne / in der Proxy_Pass-Konfiguration von Nginx
  • Implementierung von proxy_pass im Nginx-Reverse-Proxy
  • Unterschiede zwischen proxy_pass in zwei Modulen in nginx

<<:  JavaScript-Singleton-Modus zum Implementieren benutzerdefinierter Popup-Fenster

>>:  Detaillierte Erklärung des Unterschieds zwischen Alt und Titel

Artikel empfehlen

HTML-Head-Tag-Metadaten zum Erreichen einer Aktualisierungsumleitung

Code kopieren Der Code lautet wie folgt: <html...

Beispiel für die Verwendung von Dockerfile zum Erstellen eines Nginx-Images

Einführung in Dockerfile Docker kann automatisch ...

Grundlegende Verwendung und Fallstricke der JavaScript-Array-Methode sort()

Vorwort Bei der täglichen Codeentwicklung gibt es...

Anleitung zur Vermeidung von Docker Win Ping-Fehlern bei Containern

Über Win Docker-Desktop möchte ich mich mit der C...

MySQL-Daten einfügen, aktualisieren und löschen Details

Inhaltsverzeichnis 1. Einfügen 2. Aktualisierung ...

Implementierung eines Karussells mit nativem JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Farbverlaufseffekt im HTML-Hintergrund durch CSS-Stil erreicht

Screenshots der Effekte: Implementierungscode: Cod...

Lösung für die nicht wirksame Änderung des El-Popover-Stils von ElementUI

Bei der Verwendung von Element-UI gibt es eine hä...

JS Canvas-Oberfläche und Animationseffekte

Inhaltsverzeichnis Überblick Canvas API: Grafiken...

So installieren Sie MongoDB 4.2 mit Yum auf CentOS8

1. Erstellen Sie eine Repo-Datei Lesen Sie die of...