嵌套位置块中的指令继承

时间:2015-08-19 20:09:04

标签: nginx

以下两个nginx服务器块在语义上是相同的,还是有什么区别?第一个示例中的JSON特定配置是否继承" /"的设置。地点?它是在第二个例子中吗?

server {
  location / {
     # ...
     location ~* \.json$ {
          # json-specific settings
     }
  }
}

server {
  location / {
     # ...
  }
  location ~*  \.json$ {
    # json-specific settings
  }
}

1 个答案:

答案 0 :(得分:20)

Nginx中的配置指令的继承是指令只能从配置树上方的上下文继承,而不能从同一级别或更低级别的上下文继承。

因此,位置块不能从其他位置块继承,但嵌套位置块可以从父位置块继承。

我强调可以因为有许多不同类型的指令,并且每个指令的继承行为略有不同。

  1. 有标准类型指令只有一个值或一组 附加的价值观。这些只会被较低的上下文继承 在配置树下或在新的下层内容中替换 值。一个例子是“索引”。

  2. 数组类型指令,它传递多个单独的值 阵列。这些将简单地由下方的上下文继承 配置树或在较低的上下文中用新值替换。 请注意,您无法添加到阵列。改变部分正在取代它 所有。一个例子是“proxy_param”。所以如果你定义proxy_param A和 例如,在服务器级别的proxy_param B,然后尝试 在位置上下文中定义proxy_param C,“A”和“B”将是 消灭(设置为默认值)。定义“C”意味着 替换阵列。

  3. 命令类型指令(例如“try_files”)通常不是 继承了。

  4. 特别针对您的问题,在一个位置块上下文中定义的指令不能像第二个示例那样由另一个位置块上下文继承。

    父位置块中定义的标准和数组类型指令将由嵌套位置块继承。父级中定义的命令类型指令通常不会继承。