Nginx Location Priority Checker
Показать, какой location-блок реально сработает для конкретного URL.
Как это работает
Вопрос какой location сработает nginx для конкретного запроса путает даже опытных разработчиков, потому что приоритет определяется не порядком блоков в файле, а типом совпадения: точное совпадение, префиксное с модификатором, регулярное выражение, обычное префиксное. Nginx location priority checker online принимает список ваших location блоков и тестовый URL, и показывает, какой из них реально выиграет.
Логика проверки повторяет реальный алгоритм nginx: сначала ищется точное совпадение через знак равенства, если не найдено, ищется совпадение по регулярному выражению в порядке их объявления в файле, и только если ни одно регулярное выражение не подошло, применяется самое длинное подходящее префиксное совпадение.
Полезно применять при отладке ситуации, когда добавили новый location, а трафик почему-то продолжает идти в старый блок, при объяснении коллеге логики приоритета location блоков nginx, или просто для перепроверки перед добавлением нового правила в уже сложный боевой конфиг.
Частые вопросы
Что важнее в nginx, обычный префиксный location или location с регулярным выражением?
Регулярные выражения проверяются раньше и, если находят совпадение, побеждают обычный префиксный location, даже если он выглядит более специфичным по длине текста, это самая частая причина неожиданного поведения nginx.
Как работает модификатор caret tilde перед регулярным выражением?
Он делает сравнение регистронезависимым, в отличие от обычного location с тильдой без каретки, который учитывает регистр символов при сопоставлении с регулярным выражением.
Почему точное совпадение location равно путь считается самым приоритетным?
Знак равенства говорит nginx прекратить поиск сразу при полном текстовом совпадении URL с указанным путем, это самый быстрый и однозначный вид проверки, поэтому он проверяется в первую очередь перед всеми остальными типами location.
Можно ли протестировать сразу несколько тестовых URL одним запуском?
Текущая версия проверяет один URL за раз относительно всех указанных location блоков, для проверки нескольких путей нужно менять тестовый URL и запускать проверку заново для каждого варианта.