Я не понимаю разницу между разрывом и последним (флаги перезаписи). Документация довольно заумная. Я пытался переключаться между ними в некоторых своих конфигах, но не мог заметить никакой разницы в поведении. Может кто-нибудь объяснить эти флаги поподробнее? Предпочтительно с примером, который показывает другое поведение при переключении одного флага на другой.
45
Ответы:
У вас могут быть разные наборы правил перезаписи для разных мест. Когда встречается модуль перезаписи
last
, он останавливает обработку текущего набора, и переписанный запрос передается еще раз, чтобы найти подходящее местоположение (и новый набор правил перезаписи). Если правило заканчивается наbreak
, перезапись также останавливается, но переписанный запрос не передается в другое место.То есть, если есть два местоположения: loc1 и loc2, и в loc1 есть правило перезаписи, которое заменяет loc1 на loc2 И заканчивается на него
last
, запрос будет переписан и передан в местоположение loc2. Если правило заканчивается наbreak
, оно будет принадлежать местоположению loc1.источник
ОП предпочел пример. Кроме того, то, что написал @minaev, было только частью истории! Итак, поехали ...
Пример 1: Нет (перерыв или последний) флаги
Результат:
Объяснение:
Ведь
rewrite
флаги необязательны!Пример 2. Внешний блок локации (перерыв или последний)
Результат:
Объяснение:
За пределами блока локации оба
break
иlast
ведут себя точно ...location
соответствия)Пример 3: Внутренний блок локации - "break"
Результат:
Объяснение:
Внутри блока местоположения
break
флаг сделает следующее ...location
блокаПример 4: Внутренний блок локации - «последний»
Результат:
Объяснение:
Внутри блока местоположения
last
флаг сделает следующее ...rewrite
результата.Резюме:
rewrite
условие с флагомbreak
илиlast
совпадает, Nginx прекращает синтаксический анализ большеrewrites
!break
илиlast
, Nginx выполняет ту же работу (прекращает обработку, переписывает условия перезаписи).break
Nginx прекращается только обработка условий перезаписиlast
Nginx прекращается обработка условий перезаписи, а затем начинается поиск нового соответствияlocation
блока! Nginx также игнорирует любойrewrites
в новомlocation
блоке!Заключительное примечание:
Я пропустил, чтобы включить еще несколько крайних случаев (на самом деле общая проблема с переписывает, например
500 internal error
). Но это было бы за рамками этого вопроса. Вероятно, пример 1 тоже выходит за рамки!источник