web-dev-qa-db-fra.com

emplacements imbriqués nginx

J'ai du mal à comprendre les emplacements imbriqués dans nginx. J'ai deux emplacements avec quelques directives de configuration en commun, donc plutôt que de répéter les directives, je préfère répéter l'URI en utilisant une expression régulière:

location ~ /a|/b {
        location /a {
        }
        location /b {
        }
}

Cependant, cela donne l'erreur

nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36

Sans le ou | ça semble bien, cependant.

location ~ /a {
        location /a {
        }
}

Qu'est-ce que je fais mal? Existe-t-il une meilleure façon de procéder sans répéter quoi que ce soit? Puis-je regrouper des emplacements d'une autre manière?

65
Jayen

Ancienne question, mais le problème est dû au fait que l'emplacement parent est un emplacement d'expression régulière alors que les emplacements imbriqués sont des emplacements de préfixe.

Vous ne pouvez définir des emplacements de préfixe imbriqués que lorsque l'emplacement parent est également un emplacement de préfixe:

location /a {
        location /a {
               # You can also skip this location and just write
               # your code directly under the parent location
        }
        location /a/b {
        ...
        }
}

Lorsqu'un emplacement parent est défini par une expression régulière, tous les emplacements imbriqués doivent également être définis par des expressions régulières:

location ~ ^/(a|b) {
        location ~ ^/a {
        ...
        }
        location ~ ^/b {
        ...
        }
}

Cependant, vous pouvez également définir des emplacements de regex imbriqués lorsque l'emplacement parent est un emplacement de préfixe:

location /a/b {
        location ~ /a {
        ...
        }
        location ~ /b {
        ...
        }
}
109
Dayo