Nginx, yüksek performanslı bir web sunucusu ve ters proxy sunucusudur. Konfigürasyon dosyası, sunduğu özelliklerin ve işlevselliğin büyük bir kısmını belirleyen önemli bir bileşendir. “Location” blokları, gelen HTTP isteklerinin nasıl işleyeceğini tanımlamak için kullanılır. Bu bloklar, belirli URL desenlerine göre farklı işlem yapma yeteneği sunar. Bu yazıda, tam eşleşme, önek eşleşme ve regex eşleşme şeklinde üç farklı location tanımlama yöntemi üzerinde durulacaktır.
Tam Eşleşme
Tam eşleşme, bir URL’nin tam olarak belirli bir desene uyması durumudur. Nginx’de tam eşleşme için “=” işareti kullanılmaktadır. Bu tür bir eşleşme, istenen URL’nin yalnızca tam olarak tanımlanan dizine yönlendirilmesini sağlar.
Örnek bir tam eşleşme bloğu şu şekilde tanımlanabilir:
“`
location = /ornek {
Bu blok, sadece tam olarak “/ornek” isteği için çalışır.
proxy_pass http://localhost:3000;
}
“`
Bu örnekte, yalnızca “/ornek” URL’sine gelen istekler 3000 numaralı portta çalışan bir uygulamaya yönlendirilecektir. Eğer URL “/ornek/” veya başka bir varyasyon içeriyorsa, bu blok devreye girmeyecek ve diğer location blokları değerlendirilecektir.
Önek Eşleşme
Önek eşleşme, istek URL’sinin belirli bir dize ile başlaması durumunu ifade eder. Nginx’de önek eşleşme için yalnızca URL dizisini belirtmek yeterlidir, herhangi bir özel işaret kullanılmaz. Önek eşleşme, URL’nin başlangıç kısmına odaklanarak, belirli bir dizin altında yapılacak tüm istekleri kapsayacak şekilde yapılandırılır.
Aşağıda, önek eşleşme ile bir örnek verilmiştir:
“`
location /blog {
Bu blok, “/blog” ile başlayan tüm istekler için çalışır.
proxy_pass http://localhost:4000;
}
“`
Bu şekilde tanımlanan blok, “/blog” ile başlayan herhangi bir URL için geçerli olacaktır. Örneğin, “/blog/yazilar”, “/blog/hakkinda” gibi URL’ler de bu blok aracılığıyla işlenir.
Regex Eşleşme
Regex eşleşme, daha karmaşık URL desenleri tanımlamak için kullanılır. Nginx, regular expressions (regex) kullanarak URL’lerin nasıl işleneceğini belirlemek için “~” ve “~- ” işaretlerini kullanır. ” ~ ” işareti büyük-küçük harf duyarlı eşleşmelerde kullanılırken, ” ~ ” işareti büyük-küçük harf duyarsız eşleşmeler için kullanılır.
Regex eşleşme ile bir location bloğu tanımlamak için aşağıdaki şekilde bir yapı kullanılabilir:
“`
location ~ \.jpg$ {
Bu blok, “.jpg” uzantılı dosyalar için geçerlidir.
root /var/www/images;
}
“`
Bu örnek, yalnızca “.jpg” uzantılı dosyalar için tanımlı bir dizini belirtir. URL’nin sonunda “.jpg” uzantısını bulunduran her istek, “/var/www/images” dizininde bulunan resimlerle yanıtlanacaktır.
Regex kullanırken dikkatli olunması gereken bir nokta, regex eşleşmelerinin genellikle daha maliyetli olmasıdır. URL’lerinizi tanımlarken sade ve anlaşılır bir yapı izlemek, sunucunun performansını olumlu yönde etkileyebilir.
Location Bloklarının Öncelik Sırası
Nginx, location bloklarını değerlendirirken belirli bir öncelik sırasını takip eder. Sıralama şu şekildedir:
1. Tam eşleşme (eşittir “=” ile tanımlanan)
2. Prefix (önek eşleşme, kullanılan ifadelerle)
3. Regex (şayet regex kullanılan bir blok varsa)
Bu, tam eşleşme kullanan bir location bloğunun öncelıkle değerlendirileceği anlamına gelmektedir. Eğer bir tam eşleşme yoksa, Nginx öncelikle önek eşleşmeleri kontrol eder ve en son olarak regex desenlerini değerlendirir.
En İyi Uygulamalar
Nginx location bloklarının en etkili şekilde kullanılması için bazı en iyi uygulamalar dikkatle izlenmelidir. Bu noktalar arasında:
– Location blokları, gerektiğinde en basit ve anlaşılır şekilde tanımlanmalıdır.
– Performans sorunlarının önlenmesi için karmaşık regex ifadelerinden kaçınılmalıdır.
– Sunucu yapılandırması test edilerek her bir location bloğunun doğru çalıştığı doğrulanmalıdır.
URL yönetimi ve yönlendirme kurallarının doğru ve etkili bir şekilde belirlenmesi, Nginx’in verimliliğini artıracaktır. Bu, site performansı ve genel kullanıcı deneyimi açısından kritik önem taşımaktadır.