Що означає знак "@" у блоках розташування 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.