O que significa o sinal de arroba "@" nos blocos de localização do nginx?


20

Encontrei algumas perguntas e respostas aqui que usam esta sintaxe:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Eu pesquisei alto e baixo no Google e parece que não consigo encontrar nenhuma documentação dele. O que significa e quais são alguns de seus usos práticos? É algum tipo de declaração e atribuição de variável? Desculpem esta questão de novato.

Respostas:


10

A resposta está na documentação oficial .

O prefixo "@" define um local nomeado. Esse local não é usado para um processamento de solicitação regular, mas para redirecionamento de solicitação. Eles não podem ser aninhados e não podem conter locais aninhados.


37
Como explicação, isso não diz absolutamente nada.
Stefano Borini

Portanto, isso não é particularmente diferente de ter um bloco normal com interno?
James

14

No exemplo que você cita na sua pergunta:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Se a solicitação de entrada for recebida em http: // seu-domínio / em algum lugar , o local corresponderá a / em algum lugar e ele tentará em dois locais sequencialmente encontrar uma resposta, conforme especificado pela diretiva try_files, respondendo com a primeira tentativa bem-sucedida.

  1. primeiro ele testa se existe um arquivo no local / em algum lugar e, se o arquivo existe, ele é retornado na resposta.
  2. se isso falhar, ele tenta a opção de fallback try_files, @default, que é chamada de local_do_ nomeado . A resposta para esse local_ nomeado é especificada pela location @defaultdiretiva. Um local_ nomeado nunca corresponderá a uma solicitação recebida e é usado por referência para especificar a resposta em outras diretivas de local.

Dessa forma, uma instrução if pode ser evitada (se o arquivo existir, use-o, caso contrário, responda conforme especificado na diretiva location @default). Portanto, ele pode ser usado como um atalho para uma condição if. As declarações "If" são definitivamente "desaprovadas" pelos autores do nginx ( se for mau ), pois possuem algumas limitações e podem não fornecer o resultado esperado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.