nginx 位置块中的符号“@”是什么意思?

nginx 位置块中的符号“@”是什么意思?

我在这里遇到了一些使用这种语法的问题和答案:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

我在 Google 上搜索了好久,但似乎找不到任何相关文档。它是什么意思?它有哪些实际用途?它是某种变量声明和赋值吗?抱歉,这是新手的问题。

答案1

答案就在官方文档

“@”前缀定义命名位置。此类位置不用于常规请求处理,而是用于请求重定向。它们不能嵌套,也不能包含嵌套位置。

答案2

在您在问题中引用的例子中:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

如果传入请求是在http://你的域名/某处,则位置与 /somewhere 匹配,它会按顺序在两个地方尝试查找响应,如 try_files 指令所指定,并以第一次成功的尝试进行响应。

  1. 首先,它测试位置 /somewhere 处是否存在文件,如果该文件存在,则在响应中返回该文件。
  2. 如果失败,它会尝试 try_files 后备选项 @default,它被称为命名位置. 对此的回应命名位置由指令指定location @default命名位置永远不会匹配传入的请求,并通过引用来指定其他位置指令中的响应。

通过这种方式,如果语句可以避免(如果文件存在,则使用它,否则按照 location @default 指令中的指定进行响应)。因此它可以用作 if 条件的简写。“If”语句绝对是 nginx 作者“不赞成”的(if 是邪恶的) 因为它们有一些局限性并且可能无法产生预期的结果。

相关内容