Nginx Nedir? Tanımı, Nasıl Çalışır ve Kullanım Alanları
Nginx (okunuşu "engine-x"), 2004 yılında Igor Sysoev tarafından geliştirilen açık kaynak kodlu web sunucusu ve reverse proxy yazılımıdır. Yüksek performans, düşük kaynak kullanımı ve yüksek eş zamanlı bağlantı kapasitesiyle tasarlanmış olup, günümüzün en büyük web siteleri tarafından kullanılmaktadır.
Nginx (okunuşu "engine-x"), 2004 yılında Igor Sysoev tarafından geliştirilen açık kaynak kodlu web sunucusu ve reverse proxy yazılımıdır. Yüksek performans, düşük kaynak kullanımı ve yüksek eş zamanlı bağlantı kapasitesiyle tasarlanmış olup, günümüzün en büyük web siteleri tarafından kullanılmaktadır. Apache web sunucusuna alternatif olarak ortaya çıkmış, ancak günü bugüne çok daha ileri bir mimari ile öne çıkmıştır.
Nginx Nasıl Çalışır?Nginx, event-driven (olay tabanlı) mimariye dayanır. Geleneksel web sunucuları her gelen istek için ayrı bir process veya thread oluştururken, Nginx bunun yerine asenkron yapılandırmasını kullanır. Tek bir master process birden fazla worker process'i kontrol eder; her worker process binlerce bağlantıyı aynı anda işleyebilir.
İstemci (client) bir HTTP isteği gönderdiğinde, Nginx bu isteği alır ve:
- Yönlendirme (Routing): İsteğin hangi backend sunucusuna yönlendirileceğini belirler.
- Yük Dengeleme (Load Balancing): Trafiği birden fazla sunucu arasında eşit şekilde dağıtır.
- Önbellekleme (Caching): Statik içeriği bellekte tutarak hızlı sunumunu sağlar.
- Sıkıştırma (Compression): Yanıtları gzip ile sıkıştırarak bant genişliğini tasarrufu sağlar.
- SSL/TLS İşleme: Şifreli bağlantıları yönetir ve sertifika işlemlerini hızlandırır.
Bu işlemler sırasında Nginx, sistem kaynaklarını çok verimli şekilde kullanır. Bellek kullanımı minimum seviyede kalırken, binlerce ya da milyonlarca bağlantıyı aynı anda idare edebilir.
Nginx'in Avantajları- Yüksek Performans: Asenkron, event-driven mimarisi sayesinde hızlı yanıt süresi sağlar.
- Düşük Bellek Tüketimi: Aynı trafikte Apache'nin 10 katı daha az bellek kullanabilir.
- Yüksek Eş Zamanlılık: Milyonlarca bağlantıyı aynı anda işleyebilir (C10K problemi çözümü).
- Açık Kaynak: Ücretsiz, kaynak kodu açıktır ve geniş bir topluluk tarafından geliştirilir.
- Basit Yapılandırma: Sade ve anlaşılır konfigürasyon dosya formatı.
- Modular Yapı: Gerekli modüller seçilerek derlenebilir, gereksiz özellikleri hariç tutabilirsiniz.
- Reverse Proxy Yetenekleri: Mikro servis mimarilerinde harika çalışır, API gateway olarak kullanılabilir.
- Geri Uyumlu Güncellemeler: Yeni versiyonlara geçiş sırasında servis kesintisine neden olmaz.
- Modu Geliştirme Zorluğu: Apache'nin .htaccess yapısı kadar esnek değildir; yeni modüller eklemek için kaynak koddan derleme gerekebilir.
- Öğrenme Eğrisi: Reverse proxy ve event-driven mimarisi yeni başlayanlar için karmaşık olabilir.
- Dinamik İçerik İşleme: Doğrudan PHP, Python gibi dilleri çalıştıramaz; FastCGI, PHP-FPM gibi ek uygulamalar gerektirir.
- Windows Desteği Sınırlı: Temelde Unix/Linux odaklı tasarlanmıştır; Windows üzerinde stabil değildir.
- Küçük Topluluk Kaynakları: Apache'ye kıyasla daha az üçüncü taraf eklenti ve dokümantasyon mevcuttur.
1. Web Sunucusu Olarak: Statik içeriği (HTML, CSS, JavaScript, resim, video) hızlı bir şekilde sunmak için kullanılır. Yüksek trafikli siteler için idealdir.
2. Reverse Proxy Olarak: İstemcilerin isteklerini arka planda çalışan bir veya birden fazla backend sunucusuna yönlendirir. İstemci hiçbir zaman arka plandaki sunucuyla doğrudan konuşmaz.
3. Yük Dengeleyici (Load Balancer) Olarak: Trafiği birden fazla sunucu arasında dağıtır, böylece hiçbir sunucu aşırı yüklenmez ve sistem yüksek oranda erişilebilir kalır.
4. API Gateway Olarak: Mikro servis mimarisinde, tüm API isteklerini merkezi bir noktada toplar ve uygun servislere yönlendirir.
5. Sanal Host (Virtual Host) Yönetimi: Tek bir sunucuda birden fazla alan adını (domain) çalıştırmak için kullanılır.
6. SSL/TLS Termination: Şifreli bağlantıları backend sunucularıyla paylaşmak yerine Nginx'te sonlandırarak yükü azaltır.
Örnek Kullanım Senaryoları:
- Netflix, Dropbox, WordPress.com gibi büyük platformlar Nginx kullanır.
- Docker konteynerleri içinde microservice'lerin ön kısmında yer alır.
- Kubernetes ortamlarında ingress controller olarak görev yapabilir.
- CDN altyapısında statik içeriği dağıtmak için tercih edilir.
| Özellik | Nginx | Apache |
|---|---|---|
| Mimari | Event-driven (asenkron) | Process/Thread tabanlı (senkron) |
| Bellek Kullanımı | Çok düşük (~2-10 MB) | Yüksek (~80-150 MB) |
| Eş Zamanlı Bağlantı | Milyonlar (10,000+ kolayca) | Binler (1,000-5,000) |
| .htaccess Desteği | Hayır | Evet |
| Dinamik Modül Yükleme | Sınırlı | Tam (Apache2) |
| Kurulum Zorluğu | Kolay | Kolay |
| Öğrenme Eğrisi | Orta-Zor | Kolay-Orta |
Nginx'in hikayesi, Igor Sysoev'in C10K problemini çözmek isteğinden başlar. 2004 yılında ilk versiyonu yayımlanan Nginx, o tarihte web sunucularının eş zamanlı bağlantı sayısı konusundaki sınırlarını aşmak amacıyla geliştirilmiştir.
İlk yılları sessiz sedasız ilerleyen Nginx, 2010'lar sonrasında Rusya ve Asya bölgesindeki teknoloji şirketleri tarafından massif ölçekte kullanılmaya başlanmıştır. 2019 yılında F5 Networks tarafından satın alınan Nginx, artık ticari destek ve ek özellikleri (Nginx Plus) ile sunulmaktadır. Bununla birlikte açık kaynak versiyonu (Nginx) tamamen ücretsiz ve topluluk tarafından desteklenmeye devam etmektedir.
Nginx Türleri1. Nginx (Açık Kaynak): Tamamen ücretsiz, topluluk tarafından geliştirilir. Standart web sunucusu, reverse proxy ve load balancer görevlerini yapar.
2. Nginx Plus (Ticari): F5 tarafından yönetilen ticari versiyon. Ek özellikler, başarısızlık üzerinde dinleme (health check), API yönetimi, WAF (Web Application Firewall) ve 24/7 teknik destek sunulmaktadır.
3. Nginx Unit: Uygulama sunucusu olarak tasarlanmış, Node.js, Python, PHP, Ruby, Go gibi dilleri doğrudan çalıştırabilen bir varyasyondur.
Sık Sorulan SorularNginx'i nasıl kurabilirim?+
sudo apt-get install nginx (Debian/Ubuntu) veya sudo yum install nginx (CentOS/RHEL) komutlarıyla kurulabilir. Windows üzerinde resmi desteği sınırlı olsa da WSL (Windows Subsystem for Linux) içinde kurulabilir. Kurulum sonrasında sudo systemctl start nginx komutuyla hizmet başlatılır.Nginx yapılandırma dosyası nerede bulunur?+
/etc/nginx/nginx.conf konumunda yer alır. Sanal sunucu (vhost) ayarları genellikle /etc/nginx/sites-available/ veya /etc/nginx/conf.d/ dizininde depolanır. Ayarlamalar yapıldıktan sonra sudo nginx -t komutuyla söz dizimi kontrol edilir ve sudo systemctl reload nginx ile yüklenir.