posizioni nidificate nginx


60

Ho difficoltà a comprendere le posizioni nidificate in nginx. Ho due posizioni con alcune direttive di configurazione in comune, quindi piuttosto che ripetere le direttive, preferirei ripetere l'URI usando un'espressione regolare:

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

Tuttavia, questo dà l'errore

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

Senza o |sembra a posto, però.

location ~ /a {
        location /a {
        }
}

Che cosa sto facendo di sbagliato? C'è un modo migliore per farlo senza ripetere nulla? Posso raggruppare le posizioni in un altro modo?


1
Perché raggrupparli? Perché non solo KISS?
— pkhamre,


6
perché logicamente sono raggruppati
— Jayen il

Mi ci è voluto molto tempo per capire, ma alla fine sono stato in grado di creare un semplice elenco di priorità (ish) di come vengono scelte le posizioni .
— artfulrobot

Risposte:


101

Vecchia domanda, ma il problema è perché la posizione principale è una posizione regex mentre le posizioni nidificate sono posizioni prefisso.

È possibile definire posizioni prefisso nidificate solo quando la posizione padre è anche una posizione prefisso:

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

Quando una posizione padre è definita da una regex, anche tutte le posizioni nidificate devono essere definite da regex:

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

Tuttavia, è anche possibile definire posizioni regex nidificate quando la posizione padre è una posizione prefisso:

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

Sono stato confuso dalla tua prima frase, ma i tuoi esempi hanno senso. Presumo nell'ultimo esempio, la posizione del prefisso /bgenererà un errore?
— Jayen,

13
Quella prima frase dovrebbe essere nella documentazione .
— AndreKR,

1
Nel primo esempio, se si esclude la location /a { }piastra della caldaia, l'ordine conta?
— Meekohi,

2
Ah, non ho mai capito male. Le posizioni nidificate non ereditano nulla dalle posizioni principali.
— Meekohi,

La posizione padre può essere una posizione non regex ma tutte le posizioni multiple nidificate all'interno del padre devono essere tutte regex / non regex.
— MitchellK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.