В каком порядке срабатывают директивы местоположения?
Приоритет местоположения Nginx
Ответ 1
- Директивы с префиксом "=", которые точно соответствуют запросу. Если найдено, поиск останавливается.
- Все остальные директивы с обычными строками. Если это совпадение использовало префикс "^ ~", поиск останавливается.
- Регулярные выражения в порядке их определения в файле конфигурации.
- Если # 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 ] 
}
Если это все еще запутывает, здесь длинное объяснение.
Ответ 2
Это срабатывает в этом порядке.
-  =(точно)location =/path
-  ^~(прямой матч)location ^~/path
-  ~(регулярное выражение с учетом регистра)location ~/path/
-  ~*(регулярное выражение без учета регистра)location ~*.(jpg|png|bmp)
-  /location/path
