Приоритет местоположения Nginx

186

В каком порядке действуют директивы местоположения?

user650505
источник

Ответы:

352

Из документации модуля ядра HTTP :

  1. Директивы с префиксом "=", которые точно соответствуют запросу. Если найдено, поиск прекращается.
  2. Все остальные директивы с обычными строками. Если в этом совпадении использовался префикс «^ ~», поиск прекращается.
  3. Регулярные выражения, в порядке их определения в файле конфигурации.
  4. Если # 3 дал совпадение, этот результат используется. В противном случае используется совпадение от # 2.

Пример из документации:

location  = / {
  # matches the query / only.
  [ configuration A ] 
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ] 
}
location /documents/ {
  # matches any query beginning with /documents/ and continues searching,
  # so regular expressions will be checked. This will be matched only if
  # regular expressions don't find a match.
  [ configuration C ] 
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration D ] 
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration D.   
  [ configuration E ] 
}

Если это все еще сбивает с толку, вот более длинное объяснение .

Мартин Редмонд
источник
9
в этом вам может помочь :) github.com/detailyang/nginx-location-match-visible
user2228392
4
Обратите внимание, что оба /и /documents/правила соответствуют запросу /documents/index.html, но последнее правило имеет приоритет, так как это самое длинное правило.
arrakis_sun
70

Это срабатывает в этом порядке.

  1. = (именно)

    location = /path

  2. ^~ (форвард матч)

    location ^~ /path

  3. ~ (регулярное выражение с учетом регистра)

    location ~ /path/

  4. ~* (регулярное выражение без учета регистра)

    location ~* .(jpg|png|bmp)

  5. /

    location /path

Дон Диланга
источник
3
^ ~ (Вперед матч) очень важно
iwind