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


20

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

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

我在Google上搜索过很多东西,但似乎找不到任何文档。这是什么意思,实际用途是什么?它是某种变量声明和赋值吗?对不起,新手问题。

Answers:


10

答案在官方文档中

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


37
正如解释所言,这绝对没有说什么。
Stefano Borini

因此,这与在内部包含普通块没有什么特别的不同?
詹姆斯

14

在您引用问题的示例中:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

如果在http:// your-domain / somewhere接收到传入的请求,则该位置与/ somewhere匹配,并且它将在try_files指令指定的两个位置依次尝试查找响应,并以第一个成功的try响应。

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

这样,可以避免使用if语句(如果文件存在,则使用它,否则按照@default指令中的指定内容进行响应)。因此它可以用作if条件的简写。Nginx作者(如果是邪恶的话)肯定“不赞成”“ If”语句,因为它们有一定的局限性,可能无法给出预期的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.