¿Qué significa el signo "@" en los bloques de ubicación nginx?

20

He encontrado algunas preguntas y respuestas aquí que usan esta sintaxis:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

He buscado por todas partes en Google y parece que no puedo encontrar ninguna documentación al respecto. ¿Qué significa y cuáles son algunos de sus usos prácticos? ¿Es algún tipo de declaración y asignación de variables? Perdón por la pregunta de novato.

ccnokes
fuente

Respuestas:

10

La respuesta está en la documentación oficial .

El prefijo "@" define una ubicación con nombre. Dicha ubicación no se usa para un procesamiento de solicitud regular, sino que se usa para la redirección de solicitud. No se pueden anidar y no pueden contener ubicaciones anidadas.

Sin cámara
fuente
37
Como dice la explicación, esto no dice absolutamente nada.
Stefano Borini
Entonces, ¿esto no es particularmente diferente a tener un bloqueo normal con interno?
James
14

En el ejemplo que cita en su pregunta:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Si la solicitud entrante se recibe en http: // su-dominio / en algún lugar , entonces la ubicación coincide con / en algún lugar e intenta en dos lugares secuencialmente encontrar una respuesta, como lo especifica la directiva try_files, respondiendo con el primer intento exitoso.

  1. primero prueba si hay un archivo en la ubicación / en algún lugar, y si el archivo existe, se devuelve en la respuesta.
  2. si esto falla, prueba la opción de respaldo try_files, @default, que se llama ubicación_controlada . La directiva especifica la respuesta para esta ubicación nombradalocation @default . Una ubicación nombrada nunca coincidirá con una solicitud entrante, y se usa como referencia para especificar la respuesta en otras directivas de ubicación.

De esta manera, se puede evitar una instrucción if (si el archivo existe, luego úselo, de lo contrario responda como se especifica en la directiva location @default). Por lo tanto, se puede usar como una abreviatura para una condición if. Los autores de nginx definitivamente (" si es malo" ) consideran que las declaraciones "If" están "mal vistas", ya que tienen algunas limitaciones y pueden no dar el resultado esperado.

Les Nightingill
fuente