Re: В каком порядке обрабатываются location?

Maxim Dounin mdounin на mdounin.ru
Пн Фев 12 13:51:46 UTC 2018


Hello!

On Mon, Feb 12, 2018 at 04:31:18PM +0300, CoDDoC wrote:

> Доброе время суток!
> Слегка запутался в порядке обработки локейшенов.
> Такая структура:
> 
> /1/index.html
> /23/index.html
> /456/index.html
> /7890/index.html
> 
> Все файлы index.html, естественно, разные.
> 
> Соответственно, тестовый конфиг:
> 
> server {
>     ....
>     location = /1/ { rewrite ^ /1/index.html break; }
>     location = /23/ { rewrite ^ /23/index.html break; }
>     location = /456/ { rewrite ^ /456/index.html break; }
>     location = /7890/ { rewrite ^ /7890/index.html break; }

[...]

> Т.е. работает-то оно правильно, но проверки существующих 
> локейшенов почему-то всегда начинаюся с "/456/". Не понимаю, чем 
> он такой особенный? Если отталкиваться от длины, так самый 
> длинный "/7890/"

Префиксные location'ы не проверяются последовательно, а строится 
дерево, и поиск максимально совпадающего location'а делается 
проходом по дереву.  В вашем случае location /456/ оказался в 
корне дерева, и поэтому проверяется первым.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru