Что означает знак @ в блоках местоположения nginx?

20

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

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

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

ccnokes
источник

Ответы:

10

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

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

безламповый
источник
37
Как поясняется, это ничего не говорит.
Стефано Борини
Так что это не особенно отличается от нормального блока с внутренним в нем?
Джеймс
14

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

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

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

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

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

Les Nightingill
источник