Skip to main content

🌐 Nginx Location Yönergesi: Tam Eşleşme, Regex ve Proxy Ayarları

🧠 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, Nginx'in temel yönlendirme mekanizması olan location yönergesini derinlemesine öğreneceksiniz.
URI eşleşme algoritmasını, =, ^~, ~, ~* gibi düzenleyicilerin farklarını, root ve alias kullanımlarını ve proxy_pass davranışlarını adım adım keşfedeceksiniz.
Ayrıca, gerçek dünya senaryoları, SPA (Single Page Application) routing çözümleri ve performans optimizasyonu da bu rehberde yer alıyor.


⚙️ 1. Location Yönergesi Sözdizimi

location yönergesi, gelen istek URI’larını dosya sistemi yollarına veya proxy hedeflerine eşler.
Bu bloklar genellikle server { ... } içerisinde tanımlanır.

location [düzenleyici] [URI] {
# yönergeler
}

🔢 2. Location Düzenleyicileri ve Öncelikleri

DüzenleyiciAdıEşleşme DavranışıÖncelik
=Tam EşleşmeURI tamamen aynıysa eşleşir ve arama durur.En yüksek
^~Önek Eşleşmeyi DurdurRegex kontrolünü durdurur.Yüksek
~Regex (Büyük/Küçük Harfe Duyarlı)Desen eşleşmesi yapar.Orta
~*Regex (Duyarsız)Harf duyarsız desen eşleşmesi yapar.Orta
(yok)Önek EşleşmeBaşlangıç eşleşmesini kontrol eder.Düşük

🧩 Örnek Kullanımlar


# Tam eşleşme
location = /favicon.ico {
access_log off;
expires 1y;
}

# ^~ ile prefix eşleşme
location ^~ /statik/ {
root /var/www/html;
}

# Büyük/küçük harfe duyarsız regex
location ~* \.(jpg|png|gif)$ {
root /var/www/assets;
}

💡 İpucu: ^~ kullanmak, regex’lerin devreye girmesini engeller ve performansı artırır.


🔍 3. Nginx Location Eşleştirme Algoritması

Nginx her isteği dört adımda değerlendirir:

Tam Eşleşme (=) → En hızlı kontrol, anında sonuç.

En Uzun Önek Eşleşmesi → ^~ varsa regex’lere bakılmaz.

Regex Kontrolü (~, ~*) → Dosyadaki sıralamaya göre kontrol edilir.

Fallback (/) → Diğerleri eşleşmezse çalışır.

🧠 Görselleştirilmiş Sıra


location = /api { ... } # 1. Tam eşleşme
location ^~ /api/ { ... } # 2. Prefix stop
location ~ /api/v[0-9]+ { ... } # 3. Regex kontrolü
location / { ... } # 4. Yakalama bloğu

⚠️ Dikkat: Regex blokları dosyada göründükleri sırayla değerlendirilir, öncelik sırasına göre değil.


📂 4. Root ve Alias Farkı

Özellikrootalias
DavranışLocation yolunu kök dizine ekler.Location yolunu tamamen değiştirir.
Örnek/var/www/html/resimler/foto.jpg/var/cdn/fotograf/foto.jpg
Gerekli mi /?HayırEvet (sonda / olmalı)

# Doğru alias kullanımı
location /assets/ {
alias /var/www/dis_disk/assets/;
}

❗ alias kullanırken hem location hem alias tanımlarında sonunda / bulunmalıdır.


🔁 5. proxy_pass ve Eğik Çizgi (Trailing Slash) Kuralı

proxy_pass Hedefiİstek URIArka Uca Giden URIAçıklama
http://127.0.0.1:8000;/api/users/api/usersTam yolu iletir.
http://127.0.0.1:8000/;/api/users/usersLocation kısmını kaldırır.

location /api/ {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

💬 Kural: proxy_pass içinde / kullanımı, URI’nin backend’e nasıl iletileceğini değiştirir.


🧰 6. Hata Ayıklama ve Optimizasyon

🧾 Yanlış Eşleşmeyi Tespit Etme


location ^~ /admin {
add_header X-Location-Test "Admin Prefix Match" always;
}
curl -I http://site.com/admin komutu ile hangi blok çalıştığını görebilirsiniz.

⚛️ SPA Yönlendirmesi (React, Vue, Angular)


location / {
root /var/www/html;
try_files $uri $uri/ /index.html;
}

Bu yapı, /dashboard gibi alt rotalarda 404 hatalarını engeller.

🚀 Performans Tüyosu

Regex’ler yavaştır, mümkünse prefix (^~) kullanın.


# Yavaş
location ~ \.(css|js)$ { root /var/www; }

# Hızlı
location ^~ /static/ { root /var/www/static/; }

❓ Sıkça Sorulan Sorular (SSS)

1. location / bloğu neden en düşük öncelikte?

Çünkü tüm istekleri yakalar. Daha spesifik eşleşmelerin üstte çalışmasını sağlar.

2. alias kullanırken eğik çizgi neden önemli?

Eğer /static/ yerine /static yazarsanız, dosya yolları karışır. Her iki uçta da / olmalıdır.

3. try_files $uri $uri/ =404; ne işe yarar?

Nginx’e sırayla şunu söyler: 1️⃣ Dosyayı bul, 2️⃣ Dizin olarak dene, 3️⃣ Hiçbiri yoksa 404 döndür.

4. location bloklarının sırası önemli mi?

Evet, özellikle regex blokları için. Çünkü regex’ler dosya sırasına göre değerlendirilir.

5. Performansı artırmak için ne yapabilirim?

Regex’leri azalt, ^~ kullan, access_log off; ile statik isteklerde log tutma.


🧩 Ekstra: Location, Proxy ve Root Özet Tablosu

FonksiyonGörevi
fork()Yeni bir alt işlem (child process) oluşturur.
execvp()Alt işlemi yeni bir programla değiştirir.
wait()Üst işlemin (parent process) alt işlemin tamamlanmasını beklemesini sağlar.

(Üstteki tablo, sistem mantığını anlatan metaforik örnektir; Nginx süreç yönetimi buna benzer işler.)


☁️ Sonuç

location yönergelerini doğru anlamak, Nginx konfigürasyonunun kalbidir. Doğru modifier seçimi, düzenli blok sıralaması ve proxy_pass davranışını kavramak, yüksek trafikli projelerde bile hızlı ve güvenli yönlendirme sağlar.

🔒 Rabisu Bulut altyapısında, bu prensipleri uygulayarak sunucularınızda yüksek performanslı web uygulamaları kurabilirsiniz.