嵌套位置块中的指令inheritance

下面的两个nginx服务器块在语义上是相同的,还是有什么区别? 第一个示例中的JSON特定configuration是否inheritance“/”位置的设置? 在第二个例子中呢?

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

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

所以,一个位置块不能从另一个位置块继承,但是一个嵌套位置块可以从父位置块继承。

我强调可以,因为有一些不同类型的指令,继承行为是有点不同的每个。

  1. 有标准类型指令只有一个值或一组值。 这些将简单地通过配置树下的上下文继承,或者通过新的值在较低的上下文中被替换。 一个例子是“索引”。

  2. 数组类型指令,它传递数组中的多个单独的值。 这些将简单地通过配置树下的上下文继承,或者通过新的值在较低的上下文中被替换。 请注意,您不能添加到数组。 更换零件正在全部取代。 一个例子是“proxy_param”。 因此,如果您在服务器级别定义了proxy_param A和proxy_param B,然后尝试在位置上下文中定义proxy_param C,则“A”和“B”将被清除(设置为默认值)。 因为定义“C”意味着替换数组。

  3. 命令类型指令(如“try_files”)一般不会被继承。

特别是对于你的问题,在一个位置块上下文中定义的指令不能像第二个例子那样被另一个继承。

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