嵌套位置 nginx

Jay*_*yen 86 nginx

我无法理解 nginx 中的嵌套位置。我有两个位置有一些共同的配置指令,所以与其重复指令,我更喜欢使用正则表达式重复 URI:

location ~ /a|/b {
        location /a {
        }
        location /b {
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,这给出了错误

nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36
Run Code Online (Sandbox Code Playgroud)

不过,没有 or|似乎没问题。

location ~ /a {
        location /a {
        }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?有没有更好的方法来做到这一点而不重复任何事情?我可以以其他方式对位置进行分组吗?

Day*_*ayo 138

老问题,但问题是父位置是正则表达式位置,而嵌套位置是前缀位置。

当父位置也是前缀位置时,您只能定义嵌套前缀位置:

location /a {
        location /a {
               # You can also skip this location and just write
               # your code directly under the parent location
        }
        location /a/b {
        ...
        }
}
Run Code Online (Sandbox Code Playgroud)

当父位置由正则表达式定义时,任何嵌套位置也必须由正则表达式定义:

location ~ ^/(a|b) {
        location ~ ^/a {
        ...
        }
        location ~ ^/b {
        ...
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,当父位置是前缀位置时,您也可以定义嵌套的正则表达式位置:

location /a/b {
        location ~ /a {
        ...
        }
        location ~ /b {
        ...
        }
}
Run Code Online (Sandbox Code Playgroud)

  • 第一句话应该在 [documentation](http://nginx.org/en/docs/http/ngx_http_core_module.html#location) 中。 (17认同)
  • 啊没关系我误解了。嵌套位置不会从其父位置继承任何内容。 (4认同)
  • 在第一个示例中,如果省略 `location /a { }` 样板文件 - 顺序重要吗? (2认同)