Apache ve Nginx Hangisini Tercih Etmeliyim ? Apache vs Nginx
Merhabalar, yoğun bir şekilde sorulan Apache mi ? Nginx mi? sorusuna yanıt vermeye çalışacağız.
Nginx Ve Apache – En Iyi Web Sunucusu Hangisi?
NGINX vs Apache – hangi sunucu daha iyi? Apache, dünya sunucularının yarısından fazlasında kullanılmaktadır, ancak son zamanlarda Apache’den Nginx‘e hızlı bir şekilde geçişler olduğundan dolayı herkesin kafasında nginx mi apache mi sorusu oluşmaya başladı.
Bazı web analistlerinin, NGINX’e karşı Apache meselesinin önemli olduğunu düşündüklerine dikkat çekmemiz gerekir. Yalnızca en yüksek trafiğe sahip siteleri dikkate alırsak, Apache tüm sitelerin yüzde 46’sında kullanılmaktadır, ancak bu her yıl yaklaşık yüzde 4 oranında düşen bir rakamdır; Aynı hesaplama ile NGINX, pazarın yüzde 24’ü ile ikinci sırada yer alıyor. Dolayısıyla, şimdi NGINX ve Apache karşılaştırmamız ve apache mi nginx mi sorusu mantıklı görünmeye başladı.
Nginx?
NGINX’i, bir sunucunun aynı anda 10,000 istemci bağlantısına göre bir testten geçirdik. NGINX, olay modellerine Apache’den biraz daha farklı bir şekilde yaklaşıyor, çünkü her bağlantı için ekstra çalışan süreçleri kurmuyor. Genellikle NGINX, her bir CPU için bir çalışan işlemini (proccess) çalıştırmak için en iyi şekilde yapılandırılır, böylece donanımın verimliliğini en üst düzeye çıkarılabilir. NGINX, HTTP, HTTPS, SMTP, POP3 ve IMAP protokolleri, bir yük dengeleyici (load balancer) ve bir HTTP önbelleği, Apache ve diğerleri için bir ön proxy gibi bir ters proxy sunucusu gibi çeşitli rollere çok uygun hale getiren çok sayıda özellik sunar. web sunucuları, NGINX mükemmel statik içerik işleme yetenekleriyle öne çıkmaktadır. NGINX, PHP ve Python gibi dinamik içerik komut dosyaları sunmak için FastCGI ve SCGI işleyicileri için destek sunar.
APACHE
@ 512 PARALLEL REQUESTS
NGINX
@ 512 PARALLEL REQUESTS
Apache
LAMP (Linux, Apache, MySQL, PHP) popüler bir web servisidir ve Apache için web sunucusu bileşenidir. Diğer web bileşenleri (örneğin, NodeJS, çeşitli bulut hizmetleri, vb) dışında olmasına rağmen, LAMP birçok kişi için bir favori olarak kullanılmaktadır.
Apache web sunucusuna isteğe ve projeye göre özellikler kazandırmak için çeşitli harici modüller eklenebilir.
Apache istek işleme metodolojisi üç farklı şekilde çalışmaktadır. İşte üç ana İşlem Modülünün (MPM) açıklaması:
Süreçler: Bu, “ön çatal” yöntemidir; Çok sayıda eşzamanlı bağlantıyla iyi ölçeklenemez, çünkü yüksek miktarda RAM kullanır ve kaynak tüketen istekler olduğunda bağlantıları reddedebilir.
Olaylar: Bu, çalışan modelini andırır, ancak bağlantıları dinleyen ve bunları işlemek için bir çalışan iş parçacığına bir dinleyici iş parçacığı oluşturur. Bu MPM, uzun süre çalışan bağlantıları tek bir işlem üzerinde çok daha verimli bir şekilde halleder (KeepAlive kullanımı). Apache 2.4’ten beri, olay modeli kararlı olarak bildirildi ve işletim sistemi destekliyorsa, genellikle varsayılan ayardır.
Apache performansını iyileştirmek için derleme zamanı ve çalışma zamanı seçeneklerini de deneyebilirsiniz.
Çalışan modeli: bir kontrol süreci oluşturulur ve bu da ek alt süreçler yaratır. Bunların her biri daha sonra bir dinleyici dizisi ile birlikte bir dizi işlem listesi üretir. Dinleyici iş parçacığı bağlantılarını dinler ve geldiklerinde işlemek için bir iş parçacığına iletir. Bu model, ön çatal yönteminden daha etkili bir şekilde ölçeklendirir, ancak tek kontrol süreci bir darboğaz yarattığı için yüksek trafikli web sitelerinde ölçekleme sorunlarıyla karşılaşılabilir.
Apache ve Nginx İçin Detaylı Karşılaştırma
Genel olarak, her iki web sunucusu çeşitli özellikler ve ihtiyaçlar doğrultusunda tercih edilebilir. Aşağıda Statik ve Dinamik içerikler için yapılan test ve karşılaştırmaları da paylaşmış olacağız.
Statik İçerik’te Nginx ve Apache Karşılaştırması
NGINX, 1000 eşzamanlı bağlantıya kadar çalışan bir istek testine göre Apache’den 2,5 kat daha hızlı çalıştığı gözlemlenmiştir. 512 eşzamanlı bağlantıyla çalışan başka bir kıyaslama, NGINX’in yaklaşık iki kat daha hızlı olduğunu ve biraz daha az bellek tükettiğini görmüş olduk. Kuşkusuz NGINX, statik içeriklerde Apache’ye göre daha avantajlıdır. Bu nedenle, NGINX’in Apache yarışmasına karşı bu segmentte birden fazla eşzamanlı statik içerik sunmanız gerekiyorsa, NGINX mutlak bir şekilde fark atacaktır.
Dinamik İçerik’te Nginx ve Apache Karşılaştırması
Apache ve NGINX tarafından sunulan dinamik içeriği karşılaştırırken, PHP-FPM modülüyle Apache olayının MPM’nin PHP ile NGINX ile aynı eşzamanlılığı yönetebildiğini ortaya çıkardı. Başka bir web sunucusunda da performans karşılaştırması benzer sonuçlar gösterdi. Bu sonuç, web sunucusunun çekirdek kısmı yerine PHP çalışma ortamında geçirilen istek işleme süresinin neredeyse tamamındadır. PHP çalışma ortamı iki web sunucusu arasında oldukça benzer.
Speedemy’nin web sunucusu kıyaslaması, dinamik içerik sunmak için Apache ve NGINX’i kullanırken benzer bir durum tespit etti. PHP açısından, dinamik sayfa sunucusu performansı, uygun bir Apache modül kurulumu (PHP-FPM + FastCGI) ile hemen hemen aynıdır. Dinamik sayfalardan daha fazla hız almanız gerekiyorsa, birkaç seçeneğiniz vardır: Varnish veya Memcached önbellek katmanı ekleyin, daha hızlı bir PHP çalışma zamanına geçin (örn., HHVM), (Load Balancer) yük dengeleme yapabilirsiniz. Ne yazık ki, statik sayfalar sunma konusunda çok iyi iş çıkaran NGINX’e dinamik sayfalarda aynı şekilde performans sergilemedi. Aslında, her iki web sunucusu da Dinamik isteklerde bu alanda az çok benzer performans sunmaktadır.
İşletim Sistemi Desteği
Apache, Unix benzeri her tür sistemle (Linux veya BSD gibi) çalışır ve Microsoft Windows’u tamamen destekler. NGINX, bunlardan birkaçı üzerinde çalışıyor ve performansın bu kadar güçlü olmamasına rağmen, Windows içinde bazı desteklere sahiptir.
Güvenlik
Her iki web sunucusuda C kod tabanı için mükemmel bir güvenlik sınıfına sahiptir, ancak NGINX kod tabanının kabul edilemeyecek kadar büyük olması, güvenlik açısından önemli bir avantajdır. Apache 2.2 ve 2.4 için güvenlik açığı raporlaması mevcuttur. NGINX ayrıca son güvenlik danışmanlarının listesini de tutar. Apache, DDoS saldırılarını ele almak için yapılandırma ipuçları ve ayrıca HTTP DoS, DDoS veya kaba kuvvet (Brute Force) saldırılarıyla uğraşmak için gerekli modülleri sunar. Buna ek olarak, NGINX blogunda DDoS tehditleriyle başa çıkmak için kaynaklar yer almaktadır.
Esneklik
Web sunucusu, modüller yazılarak özelleştirilebilir. Apache, dinamik modül yüklemesi sunmuştur, bu nedenle tüm Apache modülleri bunu desteklemektedir. NGINX sadece 2016 başında dinamik modül yükleme desteği aldı. Bundan önce, modüllerin NGINX binary’sine eklenerek derlemesi gerekiyordu. Çoğu modül henüz dinamik yüklemeyi desteklemez, ancak bu zaman içinde geliştirilecektir. (Hızlı bir şekilde modül yüklememiz gerekiyor 🙂 ). Apache bu konuda oldukça öndedir.
Apache ve Nginx Modülleri
Hem Apache hem de NGINX birçok modül sunmaktadır.
Apache Modülleri:
Resmi Modüller (bunları Apache web sitesinin modüller bölümünde bulabilirsiniz)
Wikipedia apache modülleri listesi Şu anda, tüm üçüncü taraf modüllerin güncel bir listesi yok gibi görünüyor.
NGINX modülleri:
Resmi Modüller (NGINX web sitesinin modüller bölümünde bulabilirsiniz)
Üçüncü Taraf Modülleri
Apache veya NGINX’in burada üstün olup olmadığına karar vermek oldukça zordur, ancak gerekli çekirdek modül işlevselliğinin büyük bir kısmı (örn. Proxy, cache, load-balancing, vb.) her iki web sunucusunda mevcuttur. NGINX, TCP ve e-posta (SMTP, IMAP, POP3) bağlantıları için ters bir proxy olarak daha performanslı görünmektedir. Medya akış modülleri için, ticari NGINX Plus sürümü oldukça uzun ara öndedir.
Apache .htaccess
NGINX, Apache’nin .htaccess dosyasını desteklemiyor.
Apache ve Nginx Karşılaştırmasının Sonucu
NGINX statik içerikte daha iyidir, ancak dinamik içerik için çok az farkla daha iyi performans sunmaktadır. NGINX, daha gelişmiş özelliklerinden dolayı (medya akışı, HTTP protokolleri için ters proxy uygulaması), ticari desteğiyle ve eğitimiyle öne çıkıyor.
Paylaşımlı (hosting) sunucularında Apache’nin .htaccess dosyasını daha kullanışlı bulabilir ve Apache, NGINX’in yalnızca son zamanlarda eklediği pek çok dinamik modüle sahiptir. NGINX, sanal sunucularda, fiziksel sunucularda ve özel projeler için popülerdir.
Çok fazla ziyaretçi çeken ve çok sayıda statik içerik ve / veya akış ortamı sunacak web sitelerinin sahipleri, NGINX’i (veya Apache ve NGINX’in bir karışımını) tercih etmektedir.