У меня проблемы с пониманием вложенных местоположений в 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 {
}
}
Что я делаю не так? Есть ли лучший способ сделать это, ничего не повторяя? Могу ли я сгруппировать места по-другому?
Старый вопрос, но проблема в том, что родительское местоположение является местоположением регулярного выражения, а вложенные местоположения - местоположениями префикса.
Вы можете определять местоположения вложенных префиксов только в том случае, если родительское местоположение также является местоположением префикса:
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 {
...
}
}
Однако вы также можете определить вложенные местоположения регулярных выражений, когда родительское местоположение является префиксом:
location /a/b {
location ~ /a {
...
}
location ~ /b {
...
}
}