Nginx konum bloklarında “@” işareti ne anlama geliyor?


20

Burada bu sözdizimini kullanan birkaç soru ve cevapla karşılaştım:

location @default {
  # ...
}

location /somewhere {
    try_files $uri @default;
}

Google'da yüksek ve düşük arama yaptım ve bununla ilgili herhangi bir belge bulamıyorum. Ne anlama geliyor ve pratik kullanımlarından bazıları neler? Bir çeşit değişken bildirim ve atama mı? Acemi soru için özür dilerim.

Yanıtlar:


10

Cevap resmi belgelerdedir .

“@” Öneki adlandırılmış bir konumu tanımlar. Böyle bir konum, düzenli bir istek işleme için değil, bunun yerine istek yeniden yönlendirme için kullanılır. Yuvalanamazlar ve yuvalanmış konumlar içeremezler.


37
Açıklama ilerledikçe, bu kesinlikle hiçbir şey söylemez.
Stefano Borini

Yani bu, içinde dahili olan normal bir bloğa sahip olmaktan özellikle farklı değil mi?
James

14

Sorunuzda alıntıladığınız örnekte:

location @default {
  # ...
}

location /somewhere {
  try_files $uri @default;
}

Gelen istek http: // alan adınız / bir yerden alınırsa, konum / bir yerde eşleşir ve try_files yönergesinde belirtildiği gibi ilk başarılı denemeyle yanıt vererek bir yanıt bulmak için sırayla iki yerde çalışır.

  1. önce konumda / bir yerde bir dosya olup olmadığını test eder ve dosya varsa, yanıtta geri döner.
  2. Bu başarısız olursa, adlandırılmış_konum olarak adlandırılan try_files yedek seçeneğini (@default) dener . Bu adlandırılmış_konumunun yanıtı yönerge ile belirtilir location @default. Adlandırılmış bir konum hiçbir zaman gelen bir istekle eşleşmez ve diğer konum yönergelerindeki yanıtı belirtmek için referans olarak kullanılır.

Bu şekilde, bir if ifadesinden kaçınılabilir (dosya varsa, o zaman kullanın, aksi takdirde location @default yönergesinde belirtildiği gibi yanıt verin). Böylece bir if durumu için bir steno olarak kullanılabilir. Bazı sınırlamalar olduğundan ve beklenen sonucu vermeyebileceğinden , "ifadeler" nginx yazarları tarafından kesinlikle "kaşlarını çattıysa" ( kötü ise ).

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.