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.