Cosa significa il segno "@" nei blocchi di posizione di nginx?


20

Ho riscontrato alcune domande e risposte qui che utilizzano questa sintassi:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Ho cercato in alto e in basso su Google e non riesco a trovare alcuna documentazione. Cosa significa e quali sono alcuni dei suoi usi pratici? È una sorta di dichiarazione e assegnazione variabili? Ci scusiamo per la domanda da principiante.

Risposte:


10

La risposta è nella documentazione ufficiale .

Il prefisso "@" definisce una posizione denominata. Tale posizione non viene utilizzata per un'elaborazione della richiesta regolare, ma invece per il reindirizzamento della richiesta. Non possono essere nidificati e non possono contenere posizioni nidificate.


37
Come spiegato, questo non dice assolutamente nulla.
Stefano Borini,

Quindi questo non è particolarmente diverso dall'avere un blocco normale con interno?
James,

14

Nell'esempio che citi nella tua domanda:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Se la richiesta in arrivo viene ricevuta su http: // tuo-dominio / da qualche parte , la posizione corrisponde / da qualche parte e tenta in due punti in sequenza di trovare una risposta, come specificato dalla direttiva try_files, rispondendo con il primo tentativo riuscito.

  1. per prima cosa verifica se esiste un file nella posizione / da qualche parte e se il file esiste, viene restituito nella risposta.
  2. in caso contrario, prova l'opzione di fallback try_files, @default, che si chiama nome_locazione . La risposta per questa posizione nominata è specificata dalla location @defaultdirettiva. Una name_location non corrisponderà mai a una richiesta in arrivo e viene utilizzata come riferimento per specificare la risposta in altre direttive sulla posizione.

In questo modo, è possibile evitare un'istruzione if (se il file esiste, quindi utilizzarlo, altrimenti rispondere come specificato nella direttiva location @default). Quindi può essere usato come scorciatoia per una condizione if. Le dichiarazioni "if" sono sicuramente "disapprovate" dagli autori di nginx ( se è malvagio ) in quanto hanno alcune limitazioni e potrebbero non dare il risultato atteso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.