Nginx Nedir?
Nginx hakkında temel bilgileri bu derste bulabilirsiniz.
Nginx, açık kaynak kodlu ve yüksek performanslı bir web sunucu yazılımıdır. İlk olarak mail.ru için Igor Sysoev tarafından mail sunucusu olarak yazılmıştır. Fakat gösterdiği başarı ile şu işlemler içinde kullanılabilir hale gelmiştir:
  • HTTP, TCP ve UDP web sunucusu
  • Proxy sunucusu
  • Reverse proxy (ters vekil sunucusu)
  • Load Balancer (HTTP yük dengeleyicisi)
  • Mail sunucusu (IMAP, POP3 ve SMTP)

1. Neden Nginx Kullanmalıyım?

Nginx kullanmanız için birçok sebep vardır. Bunları şu şekilde sıralayabiliriz.
  • Açık kaynak kodlu ve ücretsizdir.
  • Konfigürasyonu ve söz dizimi kolaydır
  • Dökümantasyonu geniştir ve rahat erişilebilir
  • Minimum bellek kullanımı ister
  • Sistem gereksinimleri düşüktür
  • Yüksek performans sunar
  • Yük dengeleme (load balancing)
  • Yerine çalışma (failover)

2. Nginx Nasıl Çalışır?

Bir istemci, web sayfasını açmak istediğinde istemcinin tarayıcısı web sayfasının sunucusu ile bağlantı oluşturur yani soket açar. İlgili web sayfasının bulunduğu sunucu da bu sayfayı sunucuda bularak istemciye sunar. Bu olaya thread adı verilmektedir.
Apache gibi klasik web sunucu yazılımları blocking model adı verilen bir mimariye sahiptir gelen her istek başına bir thread oluşturur. Buna bağlı olarakta her thread için belirli bir bellek ayırır. Fakat bu çalışma şekli c10k ismi verilen bir probleme yol açar.
Nginx her istek için bir thread oluşturmak yerine olay-güdümlü, asenkron bir mimarisi ( Asynchronous Event-Driven Model) ile bir ana işlem içinde (main process) asenkron çok sayıda işçi işlemler (worker process) kullanmaktadır.
Nginx her işçi’ye, verilen görevlerin gerçekleşimi ile ilintili bir event handler bağlar. Görev alan işçi işi tamamladıktan sonra bir event fırlatır ve bu event, kendisine bağlı handler tarafından yakalanarak main processe iletilir. Bu sayede, context switch (blocking model çalışma prensibi) gibi bir mekanizmaya ihtiyaç kalmaz ve thread sayısı arttıkça artan bekleme süresi ve buna bağlı sistemin geç yanıt vermesi gibi sorunlar ortadan kalkar.
Nginx Çalışma Şekli
Her worker process bir işlemci gücünü temsil eder. Örneğin 8 çekirdekli bir sunucuda 4 worker process ayarlanırsa, her worker process 2 çekirdek kullanır.
Her worker connection bir thread i temsil eder. Bir worker process 1024 adet worker connection barındırabilir. Nginx in gücü buradan gelir.

3. Nginx vs Apache Kıyaslaması

Nginx sunucu yazılımının gücünü test edebilmemiz için uzun yıllardır kullanılan Apache sunucu yazılımı ile kıyaslayabiliriz.
4KB lık bir dosyayla yapılan test
Static bir dosya üzerinde yapılan testte Nginx saniyede 26003 işleme cevap verebilirken Apache 12416 işleme cevap verebilmiştir.
"Hello World" yazılı PHP dosyasıyla yapılan test
Bir PHP dosyası sunucuda yorumlanarak istemciye gönderilir. Böylece sunucu ile etkileşime geçmiş olunur. "Hello World" yazılı bir PHP dosyası üzerinde yapılan testte Nginx saniyede 10674 işleme cevap verebilirken Apache 9647 işleme cevap verebilmiştir.
Wordpress ve Cache kurulu test
Wordpress oldukça ağır bir PHP uygulamasıdır ve cache eklentileri büyük öneme sahiptir. Cache eklentileriyle birlikte kullanılan Wordpress üzerinde yapılan testte Nginx saniyede 9220 işleme cevap verebilirken Apache 2171 işleme cevap verebilmiştir.

4. Nginx Kullanan Siteler

Nginx kullanan 43 milyon siteden (kaynak) başlıcaları şu şekildedir:
  1. 1.
    duckduckgo.com
  2. 2.
    bitbucket.org
  3. 3.
    vk.com
  4. 4.
    blog.csdn.net
  5. 5.
    gitlab.com
  6. 6.
    xvideos.com
  7. 7.
    ahrefs.com
  8. 8.
    pornhub.com
  9. 9.
    app.asana.com
  10. 10.
    news.ycombinator.com

4. Özet

Nginx, ücretsiz ve oldukça başarılı bir web sunucu yazılımıdır. Üstelik milyonlarca site tarafından kullanılırken popülerliği de sürekli artmaktadır. Öğrenmesi ve kaynak bulması kolay, sunduğu performansı yüksek ve uygulama alanları geniş olması açısından tercih edebilirsiniz.
Nginx ten daha performanslı web sunucu yazılımları mevcuttur. İlerleyen zamanlarda ilgili web sunucu yazılımının derslerini ekleyeceğiz fakat Nginx ile başlamanız daha uygun olacaktır.
Last modified 1yr ago