Ana içeriğe geç

Nginx Server ve Location Seçim Algoritmaları

Bu Rehberde Ne Öğreneceksiniz?

Bu rehber, Nginx’in gelen HTTP isteklerini hangi server ve location bloğunun işleyeceğini nasıl belirlediğini açıklar.
Seçim algoritmasını anlayarak yönlendirme hatalarını önleyebilir ve daha performanslı yapılandırmalar oluşturabilirsiniz.


Teknik Özet

Bu içerik, Nginx yapılandırmasında server ve location bloklarının seçim sırasını detaylandırır.
Amaç, çakışan kuralları önlemek, yanlış yönlendirmeleri gidermek ve öngörülebilir konfigürasyonlar yazmaktır.
Değerlendirme süreci IP/Port eşleşmesi, alan adı önceliği ve URI bazlı location seçiminden oluşur.


1. Server Bloğu Seçim Algoritması

Nginx, bir istek geldiğinde hangi sanal sunucunun yanıt vereceğini iki aşamada belirler.

1.1 listen Direktifi Önceliği

Nginx önce isteğin IP adresi ve port bilgilerini karşılaştırır.
Daha spesifik tanım her zaman önceliklidir.

Örnek öncelik sırası:

  • 192.168.1.10:80
  • 0.0.0.0:80

Belirli IP tanımı, tüm IP’leri dinleyen tanımdan önce değerlendirilir.


1.2 server_name Değerlendirme Sırası

IP ve port eşleşirse, bu kez Host başlığı değerlendirilir.
Nginx aşağıdaki sıralamayı kesin olarak uygular:

  1. Tam eşleşme (rabisu.cloud)
  2. Önü jokerli (*.rabisu.cloud)
  3. Sonu jokerli (www.rabisu.*)
  4. Regex (~^www\.)
  5. Varsayılan server (default_server)

Hiçbir eşleşme yoksa, istek varsayılan server bloğuna yönlendirilir.


2. Location Bloğu Seçim Algoritması

Server bloğu belirlendikten sonra, URI’yi işleyecek location bloğu seçilir.
Bu süreç çok katmanlı bir öncelik sırası izler.

2.1 Tam Eşleşme (=)

location = /login { ... }
  • URI tam eşleşirse arama durur. En hızlı ve en öncelikli eşleşme türüdür.

2.2 En Uzun Önek (Prefix) Araması

  1. Nginx tüm önekleri kontrol eder ve en uzun eşleşeni saklar.

location / { ... }
location /static/ { ... }
  • /static/logo.png isteğinde /static/ kazanır.

2.3 Öncelikli Önek (^~)


location ^~ /static/ { ... }
  • Bu önek eşleşirse, regex araması tamamen atlanır. Statik dosyalar için performanslı bir çözümdür.

2.4 Regex Araması (~ ve ~*)


location ~* \.jpg$ { ... }
  1. Regex blokları dosyada yazıldıkları sıraya göre değerlendirilir. İlk eşleşen kazanır.

2.5 Varsayılan Önek

  • Regex eşleşmezse, daha önce saklanan en uzun prefix kullanılır.

3. Kod Blokları ve Teknik Davranışlar


listen 10.0.0.5:80;

  • Bu tanım yalnızca belirtilen IP üzerinden gelen istekleri kabul eder.

server_name rabisu.cloud;
  • Bu ayar tam alan adı eşleşmesi sağlar.


location = / { ... }
  • Ana sayfa gibi sabit istekleri en hızlı şekilde işler.


try_files $uri $uri/ @app;

  • Dosya bulunamazsa isteği uygulama katmanına iletir.

Sıkça Sorulan Sorular? (S.S.S)

  1. Regex bloğum neden çalışmıyor? Daha önce eşleşen bir ^~ öneki veya üstte tanımlı başka bir regex olabilir.

  2. root ve alias farkı nedir? root, URI’yi sona ekler; alias, eşleşen kısmın yerine geçer.

  3. default_server tanımlamazsam ne olur? İlgili portu dinleyen ilk server otomatik varsayılan olur.

  4. URI sonundaki / önemli mi? Evet. /static ve /static/ farklı eşleşmelere yol açabilir.


Sonuç

Nginx yapılandırmalarında her zaman basitten karmaşığa ilerleyin. Regex kullanımını minimumda tutmak performansı artırır. Değişikliklerden sonra mutlaka aşağıdaki kontrolü yapın:


nginx -t

Doğru yapılandırılmış bir Nginx altyapısı, kararlı ve yüksek performanslı sistemlerin temelidir. Bu prensipleri, Rabisu Bulut platformunda güvenle uygulayabilirsiniz.