Frage verschachtelte Standorte nginx


Ich habe Probleme, verschachtelte Standorte in nginx zu verstehen. Ich habe zwei Standorte mit einigen Konfigurationsdirektiven gemeinsam. Anstatt die Direktiven zu wiederholen, würde ich den URI lieber mit einem regulären Ausdruck wiederholen:

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

Dies ergibt jedoch den Fehler

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

Ohne das oder | es scheint jedoch in Ordnung zu sein.

location ~ /a {
        location /a {
        }
}

Was mache ich falsch? Gibt es einen besseren Weg, dies zu tun, ohne etwas zu wiederholen? Kann ich Standorte auf andere Weise gruppieren?


47
2018-04-05 07:09


Ursprung


Warum gruppieren Sie sie? Warum nicht nur KISS? - pkhamre
forum.nginx.org/read.php?2,174517,174534#msg-174534 - pkhamre
weil sie logisch gruppiert sind - Jayen
Ich brauchte lange um zu verstehen, aber am Ende konnte ich ein einfaches (ish) erstellen Prioritätsliste, wie Standorte ausgewählt werden. - artfulrobot


Antworten:


Alte Frage, aber das Problem liegt darin, dass der übergeordnete Speicherort ein Regex-Speicherort ist, während die verschachtelten Standorte Präfixspeicherorte sind.

Sie können nur geschachtelte Präfixpositionen definieren, wenn der übergeordnete Standort auch ein Präfix ist:

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

Wenn ein übergeordneter Standort durch eine Regex definiert ist, müssen alle geschachtelten Standorte auch durch Regex definiert werden:

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

Sie können jedoch auch geschachtelte Regex-Speicherorte definieren, wenn der übergeordnete Speicherort eine Präfixposition ist:

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

80
2017-09-09 15:00



Ich bin durch deinen ersten Satz verwirrt, aber deine Beispiele ergeben Sinn. Ich nehme im letzten Beispiel den Präfix-Ort an /b wird einen Fehler werfen? - Jayen
Dieser erste Satz sollte in der. Sein Dokumentation. - AndreKR
Im ersten Beispiel, wenn Sie die location /a { } Textbaustein - Ist die Bestellung wichtig? - Meekohi
Ah vergiss ich nicht. Die verschachtelten Standorte erben nichts von ihren übergeordneten Standorten. - Meekohi
Der übergeordnete Speicherort kann ein Nicht-Regex-Speicherort sein, aber mehrere verschachtelte Standorte innerhalb des übergeordneten Bereichs müssen alle regex / non regex sein. - MitchellK