Ich verstehe den Unterschied zwischen break und last (Flags of Rewrite) nicht. Die Dokumentation ist eher abstrus. Ich habe versucht, in einigen meiner Konfigurationen zwischen den beiden zu wechseln, konnte jedoch keinen Unterschied im Verhalten feststellen. Kann mir jemand diese Flags bitte näher erläutern? Am besten mit einem Beispiel, das ein anderes Verhalten beim Umblättern einer Flagge in eine andere zeigt.
45
Antworten:
Möglicherweise haben Sie unterschiedliche Sätze von Umschreiberegeln für verschiedene Speicherorte. Wenn das Umschreibemodul erfüllt ist
last
, wird die Verarbeitung des aktuellen Satzes gestoppt und die umgeschriebene Anforderung wird erneut weitergeleitet, um den geeigneten Speicherort (und den neuen Satz von Umschreiberegeln) zu finden. Wenn die Regel mit endetbreak
, wird das Umschreiben ebenfalls beendet, die umgeschriebene Anforderung wird jedoch nicht an einen anderen Speicherort übergeben.Das heißt, wenn es zwei Speicherorte gibt: loc1 und loc2 und es eine Umschreiberegel in loc1 gibt, die loc1 in loc2 ändert UND mit endet
last
, wird die Anforderung umgeschrieben und an den Speicherort loc2 übergeben. Wenn die Regel mit endetbreak
, gehört sie zum Standort loc1.quelle
OP bevorzugte ein Beispiel. Auch was @minaev schrieb, war nur ein Teil der Geschichte! Auf geht's...
Beispiel 1: Keine (break oder last) Flags
Ergebnis:
Erläuterung:
Denn
rewrite
die Flags sind optional!Beispiel 2: Außerhalb des Standortblocks (Pause oder Letzte)
Ergebnis:
Erläuterung:
Außerhalb des Standortblocks verhalten sich beide
break
undlast
genau so ...location
Übereinstimmung)Beispiel 3: Innerhalb des Positionsblocks - "Pause"
Ergebnis:
Erläuterung:
In einem Standortblock
break
würde flag Folgendes tun ...location
BlockBeispiel 4: Innerhalb des Positionsblocks - "last"
Ergebnis:
Erläuterung:
In einem Standortblock
last
würde flag Folgendes tun ...rewrite
.Zusammenfassung:
rewrite
Bedingung mit der Flaggebreak
oderlast
übereinstimmt, stoppt Nginx das Parsen nicht mehrrewrites
!break
oderlast
den gleichen Job (stoppt die Verarbeitung weiterer Umschreibebedingungen).break
stoppt Nginx nur die Verarbeitung weiterer Umschreibebedingungenlast
stoppt Nginx die Verarbeitung von erneuten Schreibbedingungen und sucht dann nach einem neuenlocation
Block- Matching ! Nginx ignoriert auch allerewrites
im neuenlocation
Block!Schlussbemerkung:
Ich habe es versäumt, weitere Randfälle einzuschließen (tatsächlich häufiges Problem bei Umschreibungen, wie z. B.
500 internal error
). Aber das würde von dieser Frage ausgeschlossen sein. Wahrscheinlich liegt Beispiel 1 auch außerhalb des Anwendungsbereichs!quelle