Назад | Перейти на главную страницу

вложенные локации nginx

У меня проблемы с пониманием вложенных местоположений в 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 {
        ...
        }
}