我无法理解 nginx 中的嵌套位置。我有两个位置有一些共同的配置指令,因此我宁愿使用正则表达式重复 URI,而不是重复指令:
location ~ /a|/b {
location /a {
}
location /b {
}
}
然而,这给出了错误
nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36
但是,没有或|
似乎还好。
location ~ /a {
location /a {
}
}
我做错了什么?有没有更好的方法可以做到这一点而不重复任何事情?我可以用另一种方式对位置进行分组吗?
答案1
老问题,但问题是因为父位置是正则表达式位置,而嵌套位置是前缀位置。
当父位置由正则表达式定义时,任何嵌套位置也必须由正则表达式定义:
location ~ ^/(a|b) {
location ~ ^/a {
...
}
location ~ ^/b {
...
}
}
仅当父位置也是前缀位置时,您才可以定义嵌套的前缀位置:
location /a {
location /a {
# You can also skip this location and just write
# your code directly under the parent location
}
location /a/b {
...
}
}
但是,当父位置是前缀位置时,您可以定义嵌套的正则表达式位置:
location /a/b {
location ~ /a {
...
}
location ~ /b {
...
}
}