Nie rozumiem różnicy między przerwaniem a ostatnim (flagi przepisywania). Dokumentacja jest raczej zawężona. Próbowałem przełączać się między nimi w niektórych moich konfiguracjach, ale nie zauważyłem żadnej różnicy w zachowaniu. Czy ktoś może wyjaśnić te flagi bardziej szczegółowo? Najlepiej z przykładem, który pokazuje inne zachowanie podczas przewracania jednej flagi na drugą.
45
Odpowiedzi:
Możesz mieć różne zestawy reguł przepisywania dla różnych lokalizacji. Gdy moduł przepisywania spełnia się
last
, przestaje przetwarzać bieżący zestaw, a przepisane żądanie zostaje ponownie przekazane w celu znalezienia odpowiedniej lokalizacji (i nowego zestawu reguł przepisywania). Jeśli reguła kończy się nabreak
, przepisywanie również się zatrzymuje, ale przepisane żądanie nie jest przekazywane do innej lokalizacji.Oznacza to, że jeśli istnieją dwie lokalizacje: loc1 i loc2, aw loc1 istnieje reguła przepisywania, która zmienia loc1 na loc2 ORAZ kończy się na
last
, żądanie zostanie przepisane i przekazane do lokalizacji loc2. Jeśli reguła kończy się nabreak
, będzie należeć do lokalizacji loc1.źródło
OP wolał przykład. To, co napisał @minaev, było tylko częścią historii! Więc zaczynamy...
Przykład 1: Brak flag (przerwa lub ostatnia)
Wynik:
Wyjaśnienie:
Ponieważ
rewrite
flagi są opcjonalne!Przykład 2: Zewnętrzny blok lokalizacji (przerwa lub ostatni)
Wynik:
Wyjaśnienie:
Poza bloku lokalizacja, zarówno
break
ilast
zachowują się dokładnie w sposób ...location
dopasowania)Przykład 3: Wewnętrzny blok lokalizacji - „przerwa”
Wynik:
Wyjaśnienie:
Wewnątrz bloku lokalizacji
break
flaga wykona następujące czynności ...location
blokuPrzykład 4: Wewnętrzny blok lokalizacji - „ostatni”
Wynik:
Wyjaśnienie:
Wewnątrz bloku lokalizacji
last
flaga wykona następujące czynności ...rewrite
wyniku.Podsumowanie:
rewrite
warunek z flagąbreak
lublast
dopasowaniami, Nginx przestaje się parsowaćrewrites
!break
lublast
, Nginx wykonuje to samo zadanie (przestaje przetwarzać warunki ponownego zapisu).break
, Nginx przestaje przetwarzać już tylko warunki przepisywanialast
Nginx przestaje przetwarzać warunki ponownego zapisu, a następnie zaczyna szukać nowego dopasowanialocation
bloku! Nginx ignoruje również dowolnerewrites
w nowymlocation
bloku!Uwaga końcowa:
Brakowało mi, aby dołączyć więcej przypadków krawędzi (w rzeczywistości częsty problem z przepisywaniem, np.
500 internal error
). Ale to byłoby poza zakresem tego pytania. Prawdopodobnie przykład 1 również jest poza zakresem!źródło