98 votes

Comment utiliser les blocs de localisation imbriqués de Nginx (préfixes vs. directives regex) ?

J'ai du mal à comprendre les emplacements imbriqués dans nginx. J'ai deux emplacements qui ont en commun certaines directives de configuration. Plutôt que de répéter les directives, je préfère répéter l'URI à l'aide d'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 correct, cependant.

location ~ /a {
        location /a {
        }
}

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

166voto

Dayo Points 1686

Vieille question, mais le problème est que l'emplacement parent est un emplacement regex alors que les emplacements imbriqués sont des emplacements préfixes.

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 regex, tous les emplacements imbriqués doivent également être définis par des regex :

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

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X