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

Vue3 implementiert ein Beispiel für eine Nachrichtenkomponente

Inhaltsverzeichnis Komponentendesign Definieren d...

Die neueste Sammlung von 18 Webdesign-Arbeiten im grünen Stil

Toy Story 3 Online-Marketing-Website Zen Mobile E...

Eine kurze Diskussion über die MySQL-Zeilenanzahl

Wir alle kennen die MySQL-Funktion count(), mit d...

Tutorial zur Installation von Ubuntu 20.04 und NVIDIA-Treibern

Installieren Sie Ubuntu 20.04 Installieren Sie NV...

Implementierung der CommonJS-Modularität in Browsern ohne Kompilierung/Server

Inhaltsverzeichnis Einführung 1. Was ist one-clic...

Docker löscht private Bibliotheksbilder vollständig

Werfen wir zunächst einen Blick auf die allgemein...

Abrufen der Erstellungszeit einer Datei unter Linux und ein praktisches Tutorial

Hintergrund Manchmal müssen wir den Erstellungsze...

Ausführliche Erklärung verschiedener binärer Objektbeziehungen in JavaScript

Inhaltsverzeichnis Vorwort Beziehungen zwischen v...

So installieren Sie MySQL und MariaDB in Docker

Beziehung zwischen MySQL und MariaDB Das Datenban...

Eine kurze Diskussion über mehrere aufgetretene Browserkompatibilitätsprobleme

Hintergrund Das Lösen von Browserkompatibilitätsp...

VUE implementiert Token-Anmeldeüberprüfung

In diesem Artikelbeispiel wird der spezifische Co...