Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Nginx server block nasıl çalışır?​


Nginx’te server block, gelen HTTP isteğinin hangi alan adı, port ve site ayarlarıyla işleneceğini belirleyen yapılandırma bölümüdür. İstek önce uygun listen adresi ve portuna, ardından server_name değerine göre bir bloğa yönlendirilir. Eşleşme yoksa ilgili listen adres:port çifti için varsayılan blok kullanılır; default_server belirtilmediyse o çiftte ilk tanımlanan blok varsayılandır. Seçilen blok; dosya kök dizinini, URL yollarını, statik dosya davranışını ve gerekirse isteğin bir uygulama sunucusuna aktarılmasını belirler.

İstek hangi sırayla eşleşir?​


Bir istemci http://example.com/ adresine gittiğinde genel akış şöyledir:

  1. İstemci alan adını çözer ve Nginx’in dinlediği IP adresine bağlanır.
  2. Nginx, isteğin geldiği IP ve portla uyumlu listen tanımlarını bulur.
  3. Bu adaylar içinde server_name değeri istek içindeki Host başlığıyla karşılaştırılır. Tam eşleşme, uygun joker eşleşme ve varsa düzenli ifade eşleşmesi değerlendirilir.
  4. Uygun isim bulunamazsa ilgili adres ve portun varsayılan server block’u kullanılır.
  5. Seçilen blok içinde URL’ye en uygun location değerlendirilir; dosya sunulur, yeniden yazılır veya başka bir servise aktarılır.

Alan adı tek başına yeterli değildir. Aynı portta birden fazla site barındırılıyorsa her sitenin server_name değeri doğru olmalıdır. Ayrıca DNS’in alan adını doğru sunucuya yönlendirmesi gerekir; Nginx yapılandırması DNS kaydının yerine geçmez.

Somut server block örneği​


Aşağıdaki örnek, example.com için statik dosyaları /var/www/example.com/public dizininden sunar. server bloğu, Nginx yapılandırmasının http bağlamı içinde yer almalıdır; dosyanın dağıtıma göre yüklenen bir yapılandırma dizinine dahil edilmesi gerekir.

Kod:
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/public;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Burada listen 80 HTTP isteklerini, server_name iki alan adını, root dosyaların temel dizinini ve try_files ise istenen dosya veya dizin bulunamazsa 404 yanıtı verilmesini tanımlar. index sayesinde dizin isteğinde index.html aranır.

Değişiklikten sonra uygulanabilir en küçük kontrol ve yükleme işlemi şöyledir:

  1. Örneği yeni ve boş bir deneme sitesinde değerlendirin. Mevcut index.html dosyasının üzerine yazmayın; gerçek kök dizini ve Nginx kullanıcısının okuma iznini doğrulayın.
  2. Server block dosyasının Nginx’in http yapılandırmasına dahil edildiğini kontrol edin.
  3. Yapılandırmayı uygun yönetici yetkisiyle yeniden yüklemeden önce nginx -t komutunu çalıştırın. Başarılı sonuçta yapılandırma sözdiziminin geçerli olduğunu belirten bir çıktı görmelisiniz.
  4. systemd kullanan Linux kurulumunda, test başarılıysa uygun yetkiyle systemctl reload nginx ile Nginx’i yeniden yükleyin. Yeniden başlatma yerine reload kullanmak mevcut bağlantıları gereksiz yere kesmeden yeni yapılandırmayı uygulamayı amaçlar.
  5. Alan adını tarayıcıda açın veya uygun bir HTTP istemcisiyle istekte bulunun. Beklenen sonuç, index.html içeriğinin dönmesidir.

nginx -t başarısız olursa reload çalıştırmayın; hata mesajındaki dosya ve satır numarasındaki eksik noktalı virgül, yanlış bağlam veya geçersiz direktifi düzeltin. Test başarılı olduğu halde başka sitenin içeriği geliyorsa önce alan adının doğru IP’ye çözüldüğünü, sonra server_name yazımını ve varsayılan bloğun seçilip seçilmediğini kontrol edin.

Yaygın kararlar ve hatalar​


DurumKullanılacak yaklaşımDikkat edilecek nokta
Bir sunucuda birden fazla alan adıHer site için ayrı server blockHer blokta ayırt edici server_name kullanın
Alan adı eşleşmiyorDoğru server_name ve DNS yönlendirmesini kontrol edinEşleşme yoksa varsayılan blok yanıt verebilir
Statik siteroot ve uygun locationDosya yolu gerçekten mevcut olmalı
Uygulama sunucusulocation içinde proxy veya FastCGI yönlendirmesiUygulamanın dinlediği adres ve port doğru olmalı

En sık hata, root yolunu sunucudaki gerçek dizinle karıştırmak veya aynı server_name değerini birden fazla blokta tanımlamaktır. İkinci durumda hangi bloğun seçileceği beklenmedik hale gelebilir. HTTPS kullanılıyorsa HTTP ve HTTPS için ayrı dinleme ayarları gerekebilir; sertifika ve yönlendirme kuralları da doğru bloğa eklenmelidir.

Sık sorulan sorular​


server block ile location arasındaki fark nedir?​


server block alan adı ve port düzeyinde sanal siteyi seçer. location ise seçilmiş sitenin içindeki URL yolunun nasıl işleneceğini belirler; örneğin dosya sunabilir veya isteği uygulamaya aktarabilir.

server_name _; tüm alan adlarını yakalar mı?​


Hayır. Alt çizgi özel bir “tüm alan adları” anahtarı değildir; varsayılan olma özelliğini isim değil, listen adres:port ve default_server belirler; yalnızca çoğu yapılandırmada geçerli alan adıyla eşleşmeyen istekler için varsayılan blok gibi kullanılmak üzere tercih edilen bir yer tutucudur. Gerçek alan adlarını açıkça tanımlamak daha anlaşılırdır.

Aynı portta neden birden fazla site çalışabilir?​


HTTP Host başlığı, Nginx’in aynı IP ve port üzerindeki istekleri farklı server_name değerlerine ayırmasını sağlar. İstemci doğru Host bilgisini göndermez veya alan adı eşleşmezse istek varsayılan server block’a düşebilir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.