Nginx в приоритетном месте

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

2 ответов


С HttpCoreModule docs:

  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 ] 
}

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


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

  1. = (точно): location = / path
  2. ^~ (прямой матч): местоположение ^~ /path
  3. ~ (регулярное выражение с учетом регистра): местоположение ~ / path/
  4. ~ * (регистр регулярных выражений нечувствителен): расположение ~* .(jpg / png / bmp)
  5. / - местоположение /путь