iç içe konumlar nginx


60

Nginx'te iç içe yerleri anlamakta sorun yaşıyorum. Bazı yapılandırma direktifleri ortak olan iki konumum var, bu yüzden direktifleri tekrarlamak yerine, normal ifadeyi kullanarak URI'yi tekrarlamayı tercih ederim:

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

Ancak, bu hata veriyor

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

Olmadan ya |da tamam görünüyor.

location ~ /a {
        location /a {
        }
}

Neyi yanlış yapıyorum? Bunu bir şeyi tekrar etmeden yapmanın daha iyi bir yolu var mı? Konumları başka bir şekilde gruplandırabilir miyim?


1
Neden onları gruplandırmalı? Neden sadece KISS değil?
pkhamre


6
çünkü mantıksal olarak gruplandırılırlar
Jayen

Bu beni anlamak için uzun zaman aldı ama sonunda yerlerin nasıl seçildiğine dair basit (ish) öncelikli bir liste oluşturabildim .
artfulrobot

Yanıtlar:


101

Eski soru, ancak sorun şu ki, iç içe konumlar önek konumlar iken üst konum regex konumdur.

Yuvalanmış önek konumlarını yalnızca üst konum bir önek konum olduğunda tanımlayabilirsiniz:

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

Bir üst konum bir regex tarafından tanımlandığında, iç içe geçmiş konumlar da regex'ler tarafından tanımlanmalıdır:

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

Ancak, üst konum bir önek konum olduğunda iç içe geçmiş regex konumlarını da tanımlayabilirsiniz:

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

İlk cümlenle kafam karıştı, ama örneklerin mantıklı. Son örnekte, önek konumunun /bbir hata atacağını farz ediyorum ?
Jayen

13
Bu ilk cümle belgelerde olmalıdır .
AndreKR

1
İlk örnekte, location /a { }kazan plakasını dışarıda bırakırsanız - sipariş önemli mi?
Meekohi

2
Neyse, yanlış anladım. İç içe konumlar, üst konumlarından hiçbir şey devralmaz.
Meekohi

Üst konum regex olmayan bir konum olabilir, ancak üst içindeki iç içe geçmiş herhangi bir konumun tümü regex / regex olmamalıdır.
MitchellK
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.