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ü
location /path/: Önek eşleşmesi. Belirtilen dizeyle başlayan tüm URI'lerle eşleşir.location = /path: Tam eşleşme. Yalnızca URI tam olarak belirtilen dizeyle aynıysa çalışır.location ^~ /path/: Öncelikli önek eşleşmesi. En uzun önek eşleşmesi bulunduğunda regex aramayı durdurur.location ~ pattern: Büyük/küçük harfe duyarlı regex eşleşmesi.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:
- Tam eşleşme (
=) aranır. Bulunursa işlem durur. - Tüm önek eşleşmeleri (düz ve
^~) kontrol edilir ve en uzun olanı hafızaya alınır. - Eğer en uzun önek
^~ile işaretlenmişse, işlem durur ve bu blok kullanılır. - Regex eşleşmeleri (
~ve~*) yapılandırma dosyasındaki sırasına göre kontrol edilir. İlk eşleşen kazanır. - 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 -tTest başarılıysa, bağlantıları kesmeden yapılandırmayı yeniden yükleyin:
sudo systemctl reload nginxSı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):
/imagesile/images/farklı davranır. Dizin benzeri yapılar için her zaman sonunda eğik çizgi kullanın.



