Примеры директив местоположения Nginx
Директива location в блоке сервера NGINX позволяет направить запрос в нужное место в файловой системе. Эта директива используется, чтобы указать NGINX, где искать ресурс, включая файлы и папки при сопоставлении блока местоположения с URL-адресом. В этом руководстве мы подробно рассмотрим директивы местоположения NGINX.
Предпосылка
- Вы уже установили NGINX, следуя нашему руководству отсюда.
Синтаксис директивы местоположения NGINX
Блок местоположения NGINX может быть размещен внутри блока сервера или внутри другого блока местоположения с некоторыми ограничениями. Синтаксис построения блока местоположения:
location [modifier] [URI] {
...
...
}
Модификатор в блоке местоположения является необязательным. Наличие модификатора в блоке местоположения позволит NGINX по-разному обрабатывать URL-адреса. Несколько наиболее распространенных модификаторов:
- нет: если в блоке местоположения нет модификаторов, запрошенный URI будет сопоставлен с началом запрошенного URI.
- =: знак равенства используется для точного сопоставления блока местоположения с запрошенным URI.
- ~: знак тильды используется для сопоставления регулярного выражения с учетом регистра и запрошенного URI.
- ~*: тильда, за которой следует знак звездочки, используется для сопоставления регулярного выражения без учета регистра с запрошенным URI.
- ^~: Карат, за которым следует знак тильды, используется для выполнения самого длинного сопоставления нерегулярного выражения с запрошенным URI. Если запрошенный URI попадает в такой блок местоположений, дальнейшее сопоставление выполняться не будет.
Как NGINX выбирает блок местоположения
Расположение можно определить с помощью строки префикса или с помощью регулярного выражения. Регулярные выражения без учета регистра указываются с предшествующим модификатором \~*, а для регулярного выражения без учета регистра используется модификатор \~. Чтобы найти совпадение местоположения для URI, NGINX сначала сканирует местоположения, определенные с помощью строк префикса (без регулярного выражения). После этого места с регулярными выражениями проверяются в порядке их объявления в конфигурационном файле. NGINX выполнит следующие шаги, чтобы выбрать блок местоположения по запрошенному URI.
- NGINX начинает с поиска точного совпадения, указанного с помощью
location=/some/path/
, и, если совпадение найдено, этот блок сразу же обслуживается. - Если таких блоков точного местоположения нет, то NGINX продолжает сопоставлять самые длинные неточные префиксы, и если совпадение найдено там, где использовался модификатор ^~, тогда NGINX прекращает дальнейший поиск, и этот блок местоположения выбирается для обслуживания запроса. .
- Если совпавший самый длинный префикс не содержит модификатора ^~, совпадение временно сохраняется, и выполните следующие шаги.
- NGINX теперь перемещает поиск к блоку местоположения, содержащему модификаторы ~ и ~*, и выбирает первый блок местоположения, который соответствует URI запроса, и сразу же выбирается для обслуживания запроса.
- Если на предыдущем шаге не найдено местоположений, которые можно сопоставить с запрошенным URI, для обслуживания запроса используется ранее сохраненный префикс местоположения.
Примеры блоков местоположения NGINX
Давайте перечислим несколько примеров блоков местоположения NGINX с использованием модификатора и URI.
1. Расположение NGINX, соответствующее всем запросам
В следующем примере префикс location/будет соответствовать всем запросам, но будет использоваться в крайнем случае, если совпадений не найдено.
location / { ... }
2. Расположение NGINX точно совпадает с URL
NGINX всегда сначала пытается сопоставить наиболее конкретное расположение префикса. Таким образом, знак равенства в следующем блоке местоположения обеспечивает точное совпадение с запрошенным путем, а затем прекращает поиск любых других совпадений.
location = /images { ... }
Приведенный выше блок местоположения будет соответствовать URL-адресу
https://domain.com/images
, но URL-адресуhttps://domain.com/images/index.html
илиhttps://domain.com/images/
не будет совпадать.3. Блок местоположения NGINX для каталога
Следующий блок местоположения будет соответствовать любому запросу, начинающемуся с /images/, но продолжит поиск более конкретного блока для запрошенного URI. Поэтому блок местоположения будет выбран, если NGINX не найдет более конкретного соответствия.
location /images/ { ... ... }
4. Пример RegEx местоположения NGINX
Модификатор ^~ в следующем блоке местоположения приводит к совпадению регулярного выражения с учетом регистра. Поэтому URI /images или /images/logo.png будут совпадать, но поиск остановится, как только будет найдено совпадение.
location ^~ /images { ... ... }
5. Блок расположения NGINX для типов файлов image/css/js
Модификатор ~* в следующем блоке местоположения соответствует любому запросу (без учета регистра), оканчивающемуся на png, ico, gif, jpg, jpeg, css или js. Однако любые запросы к папке
/images/
будут обслуживаться предыдущим блоком местоположения.location ~* .(png|ico|gif|jpg|jpeg|css|js)$ { ... ... }
6. Местоположение NGINX Сопоставление с учетом регистра регулярных выражений
Модификатор ~ в следующем блоке местоположения приводит к совпадению регулярного выражения с учетом регистра, но не останавливает поиск лучшего совпадения.
location ~ /images { ... ... }
7. Расположение NGINX Пример соответствия RegEx без учета регистра
Модификатор ~* в следующем блоке местоположения приводит к совпадению с регулярным выражением без учета регистра, но поиск лучшего совпадения на этом не заканчивается.
location ~* /images { ... ... }
Резюме
Понимание директивы местоположения NGINX необходимо для отслеживания конечных точек запрошенного URI в файловой системе. Модификаторы, этапы выбора блока местоположения и несколько примеров, рассмотренных в этой статье, помогут вам легко начать работу с блоками местоположения в NGINX.