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

ccn*_*kes 35 nginx

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

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}
Run Code Online (Sandbox Code Playgroud)

我在谷歌上进行了高低搜索,但似乎找不到任何相关文档。它是什么意思,它的一些实际用途是什么?它是某种变量声明和赋值吗?对不起,新手问题。

Les*_*ill 34

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

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}
Run Code Online (Sandbox Code Playgroud)

如果在http://your-domain/somewhere收到传入请求,则该位置与 /somewhere 匹配,并且它会按顺序在两个位置尝试以找到响应,如 try_files 指令指定的那样,以第一次成功尝试进行响应。

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

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


Tub*_*ess 15

答案在官方文档中

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

  • 正如解释所言,这完全没有说明。 (51认同)