Директива location с использованием регулярных выражений в Nginx работает по следующему алгоритму: 1
- Сначала Nginx проверяет все блоки location, заданные префиксными строками. 1 Для этого location сравнивается с полной строкой URI. 1
- Nginx ищет точное совпадение. 1 Если он находит location с модификатором =, он прекращает поиск и использует найденную конфигурацию. 1
- Если точного совпадения не обнаружено, веб-сервер выполняет поиск по неточным совпадениям. 1 Он ищет location с совпадающим префиксом максимальной длины для заданного URI. 1
- Если location с совпадающим префиксом максимальной длины содержит модификатор ^~, то Nginx немедленно прекратит поиск и выберет этот блок location для обслуживания запросов. 1
- Если location с совпадающим префиксом максимальной длины не содержит модификатора ^~, то Nginx запомнит этот префикс и продолжит поиск. 1
- После того, как Nginx нашёл и запомнил location с совпадающим префиксом максимальной длины, он приступает к оценке регулярных выражений (с учётом и без учёта регистра). 1
- Если в location с совпадающим префиксом максимальной длины есть какие-либо блоки location с регулярными выражениями, Nginx поместит их в начало списка регулярных выражений для проверки. 1
- Затем Nginx последовательно сравнит блоки с регулярными выражениями. 1 Для обработки будет выбрано первое выражение, которое соответствует URI запроса. 1
- Если совпадение с регулярным выражением не найдено, Nginx использует конфигурацию запомненного ранее префиксного location-а. 14
По умолчанию Nginx будет обслуживать регулярные выражения, отдавая предпочтение совпадениям по префиксам. 1 Однако сначала он оценивает префиксные location-ы, позволяя администратору переопределять это поведение, указав location-ы с помощью модификаторов = и ^~. 1