Що означає знак "@" у блоках розташування nginx?


20

Тут я стикався з кількома питаннями та відповідями, які використовують цей синтаксис:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Я шукав високо і низько в Google, і я не можу знайти жодну документацію про це. Що це означає і які його практичні користі? Це якесь змінне оголошення та призначення? Вибачте за запитання новачка.

Відповіді:


10

Відповідь - в офіційній документації .

Префікс "@" визначає назване місце. Таке місцезнаходження не використовується для звичайної обробки запитів, а натомість використовується для перенаправлення запиту. Вони не можуть бути вкладеними та не можуть містити вкладені місця.


37
По мірі пояснення це говорить абсолютно нічого.
— Стефано Борині

Так це не особливо відрізняється від того, щоб мати нормальний блок із внутрішнім в ньому?
— Джеймс

14

У прикладі, який ви цитуєте у своєму запитанні:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Якщо вхідний запит отримано за адресою http: // your-domain /where , то місце розташування збігається / десь і воно намагається в двох місцях послідовно знайти відповідь, як визначено директивою try_files, відповідаючи на першу успішну спробу.

  1. спочатку він перевіряє, чи є файл у місці / десь, і якщо файл існує, він повертається у відповідь.
  2. якщо це не вдається, він намагається спробувати параметр try_files, @default, який називається name_location . Відповідь на це ім'я_локації визначається location @defaultдирективою. Named_location ніколи не буде відповідати входить запитом, і використовується в якості посилання вказати відгук в інших директивах про місцезнаходження.

Таким чином, можна уникнути оператора if (якщо файл існує, тоді використовуйте його, інакше відповідайте як spec'd в директиві location @default). Тому його можна використовувати як скорочення для умови if. "Якщо" заяви безумовно "нахмурені" авторами nginx ( якщо це зло ), оскільки вони мають деякі обмеження і можуть не дати очікуваного результату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.