Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Locaiton hat vier Arten von Übereinstimmungsregeln, nämlich vollständige Übereinstimmung (=), normale Übereinstimmung mit Präfix (^~), Übereinstimmung mit regulären Ausdrücken (~ oder ~*), normale Übereinstimmung

Regel

  • Der Gleichheitszeichentyp (=) hat die höchste Priorität. Sobald eine Übereinstimmung gefunden wurde, werden keine weiteren Übereinstimmungen gefunden.
  • Die normale Präfixübereinstimmung (^~) hat die zweithöchste Priorität. Reguläre Ausdrücke werden nicht unterstützt. Präfixübereinstimmung verwenden. Wenn mehrere Standorte übereinstimmen, wird der mit dem längsten Ausdruck verwendet.
  • Reguläre Ausdruckstypen (~ ~*) haben die nächsthöhere Priorität. Sobald eine Übereinstimmung gefunden wurde, werden keine weiteren Übereinstimmungen gefunden.
  • Normale Zeichenfolgenübereinstimmung. Wenn mehrere Standortübereinstimmungen vorhanden sind, wird die mit dem längsten Ausdruck verwendet.

veranschaulichen

  • Bestimmen Sie zunächst den genauen Treffer. Wenn dieser eintrifft, geben Sie das Ergebnis sofort zurück und beenden Sie den Analysevorgang.
  • Wenn es nicht abgeschlossen ist, ermitteln Sie den gemeinsamen Treffer des Präfixes. Wenn es mehrere Treffer gibt, verwenden Sie das Trefferergebnis des „längsten“ Ausdrucks, um den Parsing-Prozess zu beenden.
  • Wenn dies nicht der Fall ist, wird die Übereinstimmung des regulären Ausdrucks weiter beurteilt. Dabei wird die Reihenfolge des regulären Ausdrucks von oben nach unten befolgt. Sobald eine Übereinstimmung erfolgreich ist, wird das Ergebnis sofort zurückgegeben und der Analysevorgang beendet.
  • Ist dieser noch nicht abgeschlossen, wird mit dem normalen Treffer fortgefahren. Der normale Treffer ist dem Präfix-Normaltreffer ähnlich. Die Reihenfolge spielt keine Rolle. Das Trefferergebnis wird durch die Länge des Standortausdrucks bestimmt.

Der Standort wird verwendet, um Ressourcen schnell zu lokalisieren und verschiedene Möglichkeiten zum Verarbeiten oder Auflösen von URL-Anfragen zu definieren, im Allgemeinen: /, = /, ~, ~*, ^~
Die Priorität ist: (Standort = /) > (Standort^~) > (Standort ~| ~* ) > (Standort /)
Von diesen wird bei ~ und ~* dasjenige, das oben steht, zuerst mit dem anderen übereinstimmen.

1. Standort / Matching

# "/" dient zur Suche nach Ressourcen direkt im Nginx-Release-Verzeichnis /usr/local/nginx/html/, z. B. location.html
Standort / {
        Stamm-HTML;
        Index Index.html Index.htm;
    }

Erstellen Sie im Release-Verzeichnis eine Datei location.html mit dem Inhalt: Dies ist location.html.
Bei der Ausführung von 172.16.0.9/location.html sucht der Server im Veröffentlichungsverzeichnis nach der Datei location.html und gibt das Ergebnis „dies ist location.html“ wie folgt zurück:

root@backupserver:/usr/local/nginx/html# ls
50x.html index.html
root@backupserver:/usr/local/nginx/html# echo "das ist location.html" > ./location.html
root@backupserver:/usr/local/nginx/html# ls
50x.html index.html standort.html
root@backupserver:/usr/local/nginx/html# /usr/local/nginx/sbin/nginx -s neu laden
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
dies ist location.html
root@backupserver:/usr/local/nginx/html# 

Bildbeschreibung hier einfügen

2. Standort = / Übereinstimmung

Die genaue Positionierung wird im Allgemeinen verwendet, um eine bestimmte Datei abzugleichen und hat eine höhere Priorität als /
Zum Beispiel:
Fügen Sie in der Nginx-Konfigurationsdatei einen Standort = / hinzu, um das Verzeichnis /data zu finden. wie folgt:

Server {
        hören Sie 80;
        Servername localhost;
        #Zeichensatz koi8-r;
        #access_log Protokolle/Host.access.log Haupt;
        Standort / {
            Autoindex aktiviert;
            Stamm-HTML;
            Index Index.html Index.htm;
        }
        Standort = /Standort.html {
            Wurzel /Daten/;
            Index Index.html;
        }

Starten Sie den Nginx-Dienst neu und testen Sie:
1. Erstellen Sie location.html noch nicht im Verzeichnis /data/.
Wie Sie sehen, wird ein 404-Fehler gemeldet. Dies liegt daran, dass = / eine höhere Priorität als / hat und der Server am zweiten Speicherort statt am ersten Speicherort nach der Datei location.html sucht. Da das durch den zweiten Standort angegebene Verzeichnis /data ist, gibt es im Verzeichnis /data keine location.html-Datei

Bildbeschreibung hier einfügen

Erstellen Sie eine location.html-Datei im Verzeichnis /data

root@backupserver:/usr/local/nginx/html# ls /data/
www
root@backupserver:/usr/local/nginx/html# echo "das ist other location.com" > /data/location.html
root@backupserver:/usr/local/nginx/html# ls
50x.html index.html standort.html
root@backupserver:/usr/local/nginx/html# curl 172.16.0.9/location.html
dies ist other location.com
root@backupserver:/usr/local/nginx/html# 

Bildbeschreibung hier einfügen

Wie Sie oben sehen können, sucht der Server beim Zugriff auf den Server zuerst am Standort = /, auch wenn dieser sich an einem anderen Standort befindet. Die exakte Übereinstimmung hat die höchste Priorität. Unabhängig davon, ob der Inhalt über oder unter dem Inhalt der Konfigurationsdatei liegt, sucht der Server zuerst nach dem exakt übereinstimmenden Inhalt.

Zusätzlich zu exakten Übereinstimmungen gibt es ~, ~*, ^~
~ ist case-sensitiv, und Übereinstimmungen sind streng case-sensitiv
~* ist nicht case-sensitiv und unterscheidet nicht zwischen Groß- und Kleinschreibung.
^~ wird verwendet, um den Anfang des URI abzugleichen. Nach erfolgreicher Übereinstimmung wird die Suche nach nachfolgenden Übereinstimmungen mit regulären Ausdrücken beendet.
Die höchste Priorität hat dabei die exakte Übereinstimmung. location = /, gefolgt von: ^ und dann ~*. Diese beiden basieren auf dem Inhalt der Konfigurationsdatei und werden zuerst abgeglichen. Die niedrigste Priorität hat /

Die oben genannten Regeln werden häufig bei der Verwendung von nginx angewendet, beispielsweise wenn mehrere Server verwendet werden, um statische und dynamische Websites zu trennen:

Standort ~ .*\.(html|htm|js|css|txt|png|jpg|jpeg|doc)$ {
Stamm-HTML;
}

Dies ist das Ende dieses Artikels über die allgemeinen Regelprioritäten des Nginx-Standorts. Weitere relevante Inhalte zu den Regelprioritäten des Nginx-Standorts finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Ausführliche Erläuterung der Standortpriorität von Nginx
  • Eine kurze Analyse der Übereinstimmungspriorität des Nginx-Konfigurationsspeicherorts
  • Priorität und Sicherheitsprobleme bei der Standortübereinstimmung der Nginx-Konfigurationsrichtlinie

<<:  Der Unterschied zwischen div und span in HTML (Gemeinsamkeiten und Unterschiede)

>>:  MySQL Serie 8 MySQL Server-Variablen

Artikel empfehlen

Tutorial zur Installation und Konfiguration von MySQL 5.7 unter CentOS7 (YUM)

Installationsumgebung: CentOS7 64-Bit, MySQL5.7 1...

Detaillierte Analyse des Reaktionsprinzips und der bidirektionalen Daten von Vue

Verstehen von object.defineProperty, um Reaktions...

Eine detaillierte Diskussion über MySQL-Deadlocks und -Logs

Vor kurzem sind mehrere Datenanomalien in MySQL o...

JavaScript zum Hinzufügen und Löschen von Nachrichten im Message Board

Dieser Artikel zeigt ein kleines Beispiel für das...

Detaillierte Erklärung des JavaScript-Statuscontainers Redux

Inhaltsverzeichnis 1. Warum Redux 2. Redux-Datenf...

Analyse und Lösungen für Probleme bei der Verwendung von Label-Tags

Ich habe kürzlich bei einer bestimmten Aufgabe das...

Mysql speichert Baumstruktur durch Adjazenzliste (Adjazenzliste)

Der folgende Inhalt stellt den Prozess und die Lö...

Zusammenfassung der Vorteile der Bereitstellung von MySQL Delayed Slaves

Vorwort Die Master-Slave-Replikationsbeziehung vo...

Vorschläge zum Erstellen geschäftlicher HTML-E-Mails

Durch E-Mail-Marketing auf Genehmigungsbasis lass...

Einen Web-Rechner mit Javascript schreiben

Dieser Artikel beschreibt hauptsächlich die Auswi...