Nginx Location Blokları: Eşleşme Kuralları ve Öncelik Sıralaması

Nginx'in gelen istekleri nasıl işlediğini ve location blokları arasındaki öncelik kurallarını öğrenin. Doğru yapılandırma ile yönlendirme hatalarını önleyin.

L
Linuxize
0 görüntülenme
Nginx Location Blokları: Eşleşme Kuralları ve Öncelik Sıralaması

Giriş

Nginx yapılandırması büyüdükçe, tek bir 'catch-all' kuralı yeterli olmaz. PHP dosyalarını PHP-FPM'e yönlendirmek, statik içerikleri önbelleğe almak veya belirli yolları korumak için location bloklarını kullanırız. Ancak, Nginx'in birden fazla eşleşen blok arasından hangisini seçeceğini tahmin etmek karmaşık olabilir. Nginx, blokları yukarıdan aşağıya taramaz; belirli bir öncelik sırası izler.

Location Blok Sözdizimi

Bir location bloğu, server bloğu içerisinde yer alır ve URI eşleşmelerini yönetir:

location [değiştirici] desen { # direktifler }

Beş Temel Eşleşme Türü

  1. location /path/: Önek eşleşmesi. Belirtilen dizeyle başlayan tüm URI'lerle eşleşir.
  2. location = /path: Tam eşleşme. Yalnızca URI tam olarak belirtilen dizeyle aynıysa çalışır.
  3. location ^~ /path/: Öncelikli önek eşleşmesi. En uzun önek eşleşmesi bulunduğunda regex aramayı durdurur.
  4. location ~ pattern: Büyük/küçük harfe duyarlı regex eşleşmesi.
  5. location ~* pattern: Büyük/küçük harfe duyarlı olmayan regex eşleşmesi.

Nginx Nasıl Karar Verir? (Öncelik Sırası)

Nginx bir istek geldiğinde şu adımları izler:

  1. Tam eşleşme (=) aranır. Bulunursa işlem durur.
  2. Tüm önek eşleşmeleri (düz ve ^~) kontrol edilir ve en uzun olanı hafızaya alınır.
  3. Eğer en uzun önek ^~ ile işaretlenmişse, işlem durur ve bu blok kullanılır.
  4. Regex eşleşmeleri (~ ve ~*) yapılandırma dosyasındaki sırasına göre kontrol edilir. İlk eşleşen kazanır.
  5. Regex eşleşmesi yoksa, 2. adımda kaydedilen en uzun önek bloğu kullanılır.
İpucu: Regex blokları dosya sırasına göre değerlendirilirken, önek blokları uzunluğa göre değerlendirilir. Bu ayrımı unutmamak yapılandırma hatalarını minimize eder.

Yapılandırmayı Test Etme

Değişiklik yaptıktan sonra Nginx'in sözdizimini mutlaka test edin:

sudo nginx -t

Test başarılıysa, bağlantıları kesmeden yapılandırmayı yeniden yükleyin:

sudo systemctl reload nginx

Sık Yapılan Hatalar

  • Yukarıdan aşağıya değerlendirme varsayımı: Önek bloklarının yerini değiştirmek önceliği etkilemez, çünkü en uzun olan her zaman kazanır.
  • ^~ kullanımı: Bu değiştiricinin regex aramalarını tamamen atladığını unutmayın.
  • Eğik çizgiler (Trailing slashes): /images ile /images/ farklı davranır. Dizin benzeri yapılar için her zaman sonunda eğik çizgi kullanın.

Kaynak

Linuxize