Co oznacza znak „@” w blokach lokalizacji nginx?

20

Spotkałem tutaj kilka pytań i odpowiedzi, które wykorzystują tę składnię:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Szukałem wysoko i nisko w Googles i nie mogę znaleźć żadnej dokumentacji na ten temat. Co to znaczy i jakie są niektóre z jego praktycznych zastosowań? Czy jest to rodzaj deklaracji zmiennej i przypisania? Przepraszamy za pytanie dla początkujących.

ccnokes
źródło

Odpowiedzi:

10

Odpowiedź znajduje się w oficjalnej dokumentacji .

Prefiks „@” określa nazwaną lokalizację. Taka lokalizacja nie jest używana do regularnego przetwarzania żądań, ale zamiast tego służy do przekierowywania żądań. Nie można ich zagnieżdżać i nie mogą zawierać zagnieżdżonych lokalizacji.

Tubeless
źródło
37
Jak wyjaśnia wyjaśnienie, absolutnie nic nie mówi.
Stefano Borini,
Więc to nie jest szczególnie różne od posiadania normalnego bloku z wewnętrznym?
James
14

W przykładzie, który zacytowałeś w swoim pytaniu:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Jeśli przychodzące żądanie zostanie odebrane pod adresem http: // twoja-domena / gdzieś , wówczas lokalizacja pasuje / gdzieś i próbuje sekwencyjnie w dwóch miejscach znaleźć odpowiedź, jak określono w dyrektywie try_files, odpowiadając przy pierwszej udanej próbie.

  1. najpierw sprawdza, czy plik znajduje się w lokalizacji / gdzieś, a jeśli plik istnieje, jest zwracany w odpowiedzi.
  2. jeśli to się nie powiedzie, spróbuje użyć opcji awaryjnej try_files @default, która nazywa się nazwaną lokalizacją . Odpowiedź na tę nazwaną lokalizację jest określona w location @defaultdyrektywie. Named_location nigdy nie będzie pasował do żądania przychodzące i jest używany w odniesieniu do określenia odpowiedzi w innych dyrektyw lokalizacji.

W ten sposób można uniknąć instrukcji if (jeśli plik istnieje, użyj go, w przeciwnym razie odpowiedz zgodnie ze specyfikacją w dyrektywie location @default). Można go zatem wykorzystać jako skrót dla warunku if. „Jeśli” stwierdzenia są zdecydowanie „odrzucone” przez autorów nginx ( jeśli jest zły ), ponieważ mają pewne ograniczenia i mogą nie dać oczekiwanego rezultatu.

Les Nightingill
źródło