Was bedeutet das At-Zeichen "@" in Nginx-Positionsblöcken?

20

Ich habe hier ein paar Fragen und Antworten gefunden, die diese Syntax verwenden:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Ich habe hoch und niedrig nach den Googles gesucht und kann anscheinend keine Dokumentation finden. Was bedeutet es und wie wird es in der Praxis eingesetzt? Ist es eine Art Variablendeklaration und -zuweisung? Entschuldigung für die Anfängerfrage.

ccnokes
quelle

Antworten:

10

Die Antwort ist in offiziellen Unterlagen .

Das Präfix "@" definiert einen benannten Ort. Ein solcher Speicherort wird nicht für eine reguläre Anforderungsverarbeitung verwendet, sondern für die Anforderungsumleitung. Sie können nicht verschachtelt sein und keine verschachtelten Positionen enthalten.

Schlauchlos
quelle
37
Wie es heißt, sagt dies absolut nichts aus.
Stefano Borini
Das ist also nicht besonders anders als ein normaler Block mit internem Inhalt?
James
14

In dem Beispiel, das Sie in Ihrer Frage zitieren:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Wenn die eingehende Anforderung unter http: // your-domain / somewhere empfangen wird , stimmt der Speicherort mit / somewhere überein, und es wird an zwei Stellen nacheinander versucht, eine Antwort zu finden, wie in der Anweisung try_files angegeben, und beim ersten erfolgreichen Versuch geantwortet.

  1. Zuerst wird geprüft, ob sich eine Datei am Speicherort befindet. Wenn die Datei vorhanden ist, wird sie in der Antwort zurückgegeben.
  2. Wenn dies fehlschlägt, wird die Fallback-Option try_files (@default) verwendet, die als named_location bezeichnet wird . Die Antwort für diese named_location wird von der location @defaultDirektive angegeben. Ein named_location entspricht niemals einer eingehenden Anfrage und wird als Referenz verwendet, um die Antwort in anderen Location-Direktiven anzugeben.

Auf diese Weise kann eine if- Anweisung vermieden werden (wenn die Datei vorhanden ist, verwenden Sie sie, andernfalls antworten Sie wie in der Anweisung location @default angegeben). Es kann also als Abkürzung für eine if-Bedingung verwendet werden. "If" -Anweisungen werden von den Nginx-Autoren definitiv "missbilligt" ( wenn es böse ist ), da sie einige Einschränkungen haben und möglicherweise nicht das erwartete Ergebnis liefern.

Les Nightingill
quelle