Назад | Перейти на главную страницу

Что означает знак «@» в блоках локации nginx?

Я встретил здесь несколько вопросов и ответов, в которых используется этот синтаксис:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Я искал много и мало в Google, и я не могу найти никакой документации по этому поводу. Что это значит и каково его практическое применение? Это какое-то объявление и присвоение переменных? Извините за вопрос новичка.

В примере, который вы цитируете в своем вопросе:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Если входящий запрос получен на http: // ваш-домен / где-нибудь, то местоположение соответствует / где-то, и он пытается в двух местах последовательно найти ответ, как указано в директиве try_files, отвечая первой успешной попыткой.

  1. сначала он проверяет, есть ли файл в этом месте / где-то, и если файл существует, он возвращается в ответе.
  2. если это не удается, он пробует резервную опцию try_files, @default, которая называется named_location. Ответ на это named_location определяется location @default директива. А named_location никогда не будет соответствовать входящему запросу и используется по ссылке для указания ответа в других директивах местоположения.

Таким образом, если можно избежать (если файл существует, используйте его, иначе ответьте так, как указано в директиве location @default). Таким образом, его можно использовать как сокращение для условия if. Утверждения «если» определенно не одобряются авторами nginx (если зло), поскольку они имеют некоторые ограничения и могут не дать ожидаемого результата.

Ответ в официальная документация.

Префикс «@» определяет именованное местоположение. Такое расположение не используется для обычной обработки запроса, а вместо этого используется для перенаправления запроса. Они не могут быть вложенными и не могут содержать вложенных расположений.