Поиск по сайту:

Примеры директив местоположения 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.