Директивы Location в NGINX: Исчерпывающее руководство

Навигация по миру NGINX, популярного веб-сервера с открытым исходным кодом, часто может быть сложной без правильного понимания его различных элементов. Одним из таких ключевых компонентов, играющих решающую роль в маршрутизации запросов в нужное место в вашей файловой системе, является директива расположения NGINX. Цель данного руководства - дать исчерпывающее представление о директивах Location NGINX, чтобы вооружить вас знаниями для их эффективного использования в вашей конфигурации.

Предварительные условия

Этот учебник предполагает, что в вашей системе уже установлен NGINX. Это основное условие, так как директивы расположения являются частью конфигурации NGINX, следовательно, требуется рабочий экземпляр NGINX.

Понимание синтаксиса директивы расположения NGINX

Блок location в NGINX может быть вложен в блок сервера или даже в другой блок location, с учетом некоторых ограничений. Вот основной синтаксис для построения блока расположения:

Модификатор в блоке location, хотя и необязательный, предлагает способ настроить взаимодействие NGINX с URL. Некоторые из наиболее часто используемых модификаторов следующие:

  • none: При отсутствии модификатора в блоке расположения запрашиваемый URI сопоставляется с началом запрашиваемого URI.
  • = : Используется для точного соответствия между блоком расположения и запрашиваемым URI.
  • ~ : Используется для чувствительного к регистру регулярного выражения для сопоставления с запрашиваемым URI.
  • ~ :* Используется для нечувствительного к регистру регулярного выражения в запрошенном URI.
  • ^~ : Используется для самого длинного совпадения нерегулярного выражения с запрашиваемым URI. Когда запрашиваемый URI попадает в такой блок расположения, дальнейшее сопоставление не происходит.

Как NGINX выбирает блок местоположения?

Местоположение может быть определено с помощью префиксной строки или регулярного выражения. Регулярные выражения без учета регистра обозначаются предшествующим модификатором "*", а модификатор "" означает регулярные выражения с учетом регистра. Чтобы найти совпадение местоположения с URI, NGINX сначала сканирует местоположения, определенные с помощью префиксных строк (без регулярных выражений). После этого проверяются места с регулярными выражениями в порядке их объявления в конфигурационном файле.

NGINX выполняет следующие шаги, чтобы выбрать блок расположения для запрашиваемого URI:

  1. NGINX начинает с поиска точного соответствия, указанного с помощью location = /some/path/. Если совпадение найдено, этот блок сразу же обслуживается.
  2. Если точных блоков location не найдено, NGINX переходит к поиску самых длинных неточных префиксов. Если найдено совпадение, где используется модификатор ^~, NGINX прекращает поиск. Затем для обслуживания запроса выбирается соответствующий блок местоположения.
  3. Если найденное местоположение с самым длинным префиксом не содержит модификатора ^~, это совпадение временно сохраняется, и процесс переходит к следующим шагам.
  4. Затем NGINX переключает поиск на блоки местоположений, содержащие модификаторы ~ и ~*, выбирая первый блок местоположений, который соответствует запрошенному URI.
  5. Если на этом этапе не найдено ни одного местоположения, то для обслуживания запроса используется ранее сохраненное префиксное местоположение.

Углубление в примеры блоков местоположения NGINX

Ниже мы рассмотрим различные примеры блоков расположения NGINX с использованием различных модификаторов и URI.
Обработка всех запросов в NGINX

В нашем первом примере мы иллюстрируем использование корневого блока location /, который действует в качестве "ловушки" для любых запросов, которые не находят соответствия в других местах конфигурации.

Предшествующий блок location служит в качестве защитной сетки, вступая в действие для обработки любых запросов, которые не были найдены другими блоками location. Хотя технически он соответствует всем запросам, он будет вызван только в крайнем случае, если не будет найдено других вариантов.

Сопоставление точного URL в NGINX

NGINX работает по стратегии, которая отдает предпочтение наиболее специфическому расположению префикса в процессе поиска. Давайте рассмотрим, как использовать это поведение с помощью модификатора со знаком равенства (=) в блоке location:

Этот блок расположения будет точно соответствовать URL https://domain.com/images. Однако стоит отметить, что он не будет соответствовать URL https://domain.com/images/index.html или https://domain.com/images/, поскольку модификатор = требует точного соответствия и не учитывает дополнительные элементы URI.

Блок location NGINX для поиска по каталогам

Следующий пример демонстрирует блок расположения, который соответствует любому запросу, начинающемуся с /images/, но не останавливает поиск более специфических блоков, относящихся к запрошенному URI:

Этот блок location представляет собой баланс между специфичностью и гибкостью. Он будет соответствовать любому запросу, начинающемуся с /images/, но не исключает возможности найти более конкретные совпадения. Если NGINX не удается найти более конкретные соответствия, для обработки запроса выбирается этот блок расположения.

Блок location NGINX: Регулярное выражение, чувствительное к регистру

Модификатор ^~ в следующем блоке расположения позволяет использовать регулярное выражение, чувствительное к регистру:

В этом примере будут найдены URI /images или /images/logo.png. Однако модификатор ^~ гарантирует, что поиск прекратится, как только будет найдено совпадение, что повышает эффективность конфигурации.

Блок location NGINX для определенных типов файлов

Модификатор ~* в следующем блоке расположения предназначен для поиска (без учета регистра) любого запроса, заканчивающегося рядом расширений файлов:

Этот универсальный блок особенно полезен для работы со статическими активами, он соответствует любому запросу, заканчивающемуся расширениями png, ico, gif, jpg, jpeg, css или js. Обратите внимание, однако, что любые запросы к папке /images/ будут приоритетны по отношению к любому предыдущему блоку location.

Блок location NGINX: Сопоставление с регулярным выражением, чувствительным к регистру

Модификатор ~ позволяет использовать регулярные выражения, чувствительные к регистру, как показано в следующем блоке расположения:

В отличие от модификатора ^~, модификатор ~ продолжает поиск более конкретного соответствия даже после нахождения совпадения.

NGINX Location: Пример соответствия регулярного выражения, нечувствительного к регистру

Модификатор ~* также может быть использован для установления соответствия регулярного выражения без учета регистра, как показано в блоке location ниже:

В этом случае совпадение будет найдено независимо от регистра запрашиваемого URI. Однако, как и в предыдущем примере с учетом регистра, поиск не прекратится, и NGINX продолжит искать лучшее соответствие.

Добавление резервного местоположения в NGINX

Иногда может возникнуть необходимость установить местоположение по умолчанию или резервное местоположение. Этого можно добиться с помощью следующей конфигурации:

Этот блок location точно соответствует корневому URL и может использоваться в качестве страницы по умолчанию или запасного местоположения. Например, он может обслуживать пользовательскую страницу ошибки 404, если запрошенная страница не найдена.

Заключение

Понимание директив расположения NGINX необходимо для точного отслеживания конечных точек запрашиваемых URI в вашей файловой системе. Рассмотрев роль модификаторов, шаги, связанные с выбором блока расположения, и различные примеры, это руководство призвано обеспечить прочную основу для начала работы с блоками расположения в NGINX.

Помните, что правильная и оптимизированная конфигурация является краеугольным камнем надежного и эффективного развертывания NGINX. Эти знания позволят вам создавать конфигурации, соответствующие вашим нуждам и требованиям, что еще больше повысит вашу квалификацию в работе с NGINX.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий