NGINX (genellikle “engine-x” olarak telaffuz edilir), yüksek performanslı bir HTTP ve ters proxy sunucusu olarak bilinen açık kaynaklı bir yazılımdır. İlk olarak Igor Sysoev tarafından 2004 yılında geliştirilmiş ve o zamandan beri dünya çapında web sunucuları ve ağ yöneticileri tarafından yaygın bir şekilde benimsenmiştir. NGINX, başlangıçta yüksek trafikli web sitelerini işleyebilmek için tasarlanmış olup, bugün birçok farklı amaç için kullanılmaktadır.
NGINX’in Başlıca Özellikleri
- Yüksek Performans ve Düşük Bellek Kullanımı: NGINX, asenkron ve olay tabanlı bir mimariye sahiptir. Bu mimari, aynı anda binlerce bağlantıyı verimli bir şekilde işleyebilmesine olanak tanır. Diğer geleneksel web sunucuları genellikle her bağlantı için bir iş parçacığı kullanırken, NGINX tek bir iş parçacığında birçok bağlantıyı yönetebilir, bu da bellek ve işlemci kullanımını önemli ölçüde azaltır.
- Ters Proxy Sunucusu: NGINX, ters proxy sunucusu olarak da işlev görür. Bu, istemcilerden gelen istekleri alıp, bu istekleri arka uç sunuculara ileterek yanıtları istemcilere geri döndürmesi anlamına gelir. Bu özellik, yük dengeleme, hızlandırma ve güvenlik sağlama gibi amaçlar için idealdir.
- Yük Dengeleme: NGINX, yük dengeleme yetenekleri ile trafiği birden fazla sunucu arasında dağıtarak, web uygulamalarının ölçeklenebilirliğini ve erişilebilirliğini artırır. Bu, sunucu üzerindeki yükü dengeler ve tek bir sunucunun aşırı yüklenmesini önler.
- Statik İçerik Sunumu: NGINX, statik içerikleri (HTML, CSS, JavaScript, resimler vb.) çok hızlı bir şekilde sunabilir. Bu, dinamik içeriklerin işlenmesi gerektiğinde bile, web sitelerinin performansını artırır.
- SSL/TLS Desteği: Güvenli bağlantılar sağlamak için SSL ve TLS protokollerini destekler. Bu, web sitelerinin güvenliğini artırmak ve kullanıcı verilerini korumak için önemlidir.
- Modüler Yapı: NGINX’in modüler yapısı, ek işlevsellikler eklemek ve gereksinimlere göre yapılandırmak için çeşitli modüllerin kullanılmasına olanak tanır. Bu, NGINX’in çok yönlü ve esnek bir şekilde kullanılabilmesini sağlar.
NGINX’in Kullanım Alanları
- Web Sunucusu: Birincil kullanım alanı olarak HTTP sunucusu işlevi görür. Hızlı ve verimli bir şekilde web sayfalarını sunar.
- Ters Proxy: Arka uç sunucularla iletişimi yönetir ve yük dengeleme, önbellekleme ve güvenlik işlevlerini sağlar.
- E-posta Proxy: IMAP, POP3 ve SMTP protokolleri için e-posta proxy sunucusu olarak kullanılabilir.
- API Ağ Geçidi: Mikro hizmet mimarilerinde API ağ geçidi olarak kullanılabilir ve çeşitli mikro hizmetlerin yönetimini kolaylaştırır.
NGINX’in Avantajları
- Yüksek Performans: Yüksek trafikli web siteleri için ideal bir çözümdür.
- Düşük Bellek Kullanımı: Geleneksel sunuculara göre daha az bellek kullanır.
- Esneklik ve Modülerlik: Farklı modüller ile genişletilebilir ve özelleştirilebilir.
- Güvenlik: SSL/TLS desteği ile güvenli bağlantılar sağlar.
NGINX Nasıl Çalışır?
NGINX, yüksek performans ve düşük bellek kullanımı ile bilinen asenkron ve olay tabanlı bir mimariye sahip bir web sunucusudur. İşte NGINX’in çalışma prensipleri ve nasıl işlediğine dair detaylı bir açıklama:
1. Olay Tabanlı ve Asenkron Mimari
NGINX’in en önemli özelliklerinden biri, asenkron ve olay tabanlı mimarisidir. Bu yapı, her istemci isteği için ayrı bir iş parçacığı veya işlem oluşturmak yerine, tek bir iş parçacığında birçok bağlantıyı yönetebilmesini sağlar. Bu sayede, sistem kaynakları daha verimli kullanılır ve aynı anda çok sayıda isteği işleyebilir.
2. Master-Worker Yapısı
NGINX, master-worker yapısı ile çalışır. Bu yapı, yüksek performans ve güvenilirlik sağlar.
- Master Süreç: Master süreç, yapılandırma dosyalarını okur, worker süreçleri başlatır ve yönetir. Ayrıca, yeniden yapılandırma ve günlük döndürme gibi yönetimsel görevleri de yerine getirir.
- Worker Süreçleri: Worker süreçleri, istemci isteklerini işler. Her worker süreç, asenkron ve olay tabanlı modelde çalışarak, bağlantıları yönetir ve istekleri işler. İstemciden gelen bir istek, master süreç tarafından uygun bir worker sürece yönlendirilir. Worker süreç, bu isteği işleyip yanıtı istemciye geri döndürür.
3. İstek İşleme Aşamaları
NGINX, istemci isteklerini işlemek için aşağıdaki adımları izler:
- Bağlantı Kabulü: İstemciden gelen bağlantı isteği, master süreç tarafından kabul edilir ve uygun bir worker sürece iletilir.
- İstek Analizi: Worker süreç, HTTP istek başlıklarını okur ve analiz eder. İstek türünü belirler ve gerekli yönlendirmeleri yapar.
- Önbellekleme: NGINX, sık kullanılan içerikleri önbelleğe alabilir. Eğer istenen içerik önbellekte mevcutsa, doğrudan önbellekten yanıt döner.
- Proxy ve Yönlendirme: Eğer istek bir arka uç sunucusuna iletilmesi gerekiyorsa, worker süreç, isteği uygun arka uç sunucusuna yönlendirir (ters proxy işlevi).
- İçerik Sunumu: Statik içerikler (HTML, CSS, JS, resimler) NGINX tarafından doğrudan sunulabilir. Dinamik içerikler ise arka uç sunuculardan alınarak istemciye iletilir.
- Yanıt Gönderimi: İstek işlendikten sonra, yanıt istemciye gönderilir ve bağlantı sonlandırılır.
4. Modüler Yapı
NGINX, modüler bir yapıya sahiptir ve bu sayede genişletilebilir. Çeşitli modüller kullanılarak ek işlevsellikler eklenebilir. Örneğin, gzip sıkıştırma, SSL/TLS desteği, URL yönlendirme ve yeniden yazma gibi özellikler modüller aracılığıyla sağlanabilir.
5. Yük Dengeleme ve Hata Yönetimi
NGINX, yük dengeleme özellikleri ile trafiği birden fazla arka uç sunucusuna dağıtarak, sunucular arasındaki yükü dengeler. Bu, yüksek erişilebilirlik ve ölçeklenebilirlik sağlar. Ayrıca, arka uç sunucuların durumunu izleyerek, hata durumlarında otomatik olarak sağlıklı sunuculara yönlendirme yapar.

6. Güvenlik
NGINX, SSL/TLS desteği ile güvenli bağlantılar sağlar. Ayrıca, erişim kontrolü, DDoS koruması ve HTTP güvenlik başlıkları gibi çeşitli güvenlik önlemleri de sunar.
Sonuç
NGINX, modern web uygulamaları için yüksek performanslı, esnek ve güvenilir bir çözümdür. Asenkron ve olay tabanlı mimarisi, master-worker yapısı, modülerliği ve geniş özellik yelpazesi ile birçok farklı kullanım senaryosu için uygundur. Web sunucusu, ters proxy, yük dengeleme ve daha birçok işlevi yerine getirebilmesi sayesinde, NGINX günümüzün en popüler web sunucularından biri haline gelmiştir.