Apache ve Nginx Sunucuları: Bu İki Sunucu Türünün Düşüşü

Yayınlanan: 2022-01-03

İnternet bir dizi sunucu üzerinde çalışır. Ancak bunların standart bir masaüstü makineden farklı bir kurulumu vardır. Bilgili bir sistem yöneticisi veya arka uç geliştirici, bu seçimi sahip oldukları ihtiyaçlara göre optimize edecektir. Bunu yapmanın birincil yolu, bir sunucu yazılımı seçimidir. Bu alandaki popüler bir karşılaştırma, Apache ve Nginx'tir.

Bunun birkaç nedeni vardır, ancak kullanım sayıları ve uzun ömür iki ana nedendir. Nginx daha yeni ve modern web standartları için tartışmasız daha yetenekli. Bununla birlikte, Apache de herhangi bir yumruk atmaz ve dünya çapında milyonlarca kullanıcıya web siteleri sunma yeteneğine sahiptir.

Bu yazıda, size Apache ve Nginx'in bir karşılaştırmasını vereceğiz. Her iki sunucu türünün de popülaritesi gibi yüzey düzeyindeki öğelere bakacağız. Bununla birlikte, her biri için teknik özellikleri ve değerlendirmeleri de inceleyeceğiz. Sonunda, her iki yazılım türünün de ayrıntılarını ve hangisinin sunucunuz için en iyisi olduğunu öğreneceksiniz.

Apache ve Nginx Nedir?

Bu makaleyi okumak, bir web sunucusunun optimum performansı sağlamak için özel yazılım gerektirdiğini büyük olasılıkla anladığınız anlamına gelir. Bu parça, genel anlamda sunucu yazılımının ne olduğunu veya ne yaptığını kapsamayacak olsa da, sunucunuz için önde gelen iki çözümü ele alacağız:

  • Apaçi. Bu, çoğu Linux 'dağıtımıyla' önceden yüklenmiş olarak gelen ücretsiz ve açık kaynaklı bir yazılımdır. 1995'ten beri var ve bu iki faktör nedeniyle pazarda neredeyse lider bir konuma sahip.
  • Nginx. Diğer sunucu yazılımlarına kıyasla göreceli bir bebek olsa da, Nginx'in çok sayıda kullanıcısı var. Şu anki yazımda, en popüler sunucu yazılımı (daha sonraları) için neredeyse ilk önce Apache ile ortaktır.

Apache'nin onlarca yıldır lider sunucu yazılımı olduğunu ve o zaman için büyük bir pazar payı elde ettiğini belirtmekte fayda var. Bununla birlikte, Nginx artık çok fazla olmasa da önde gidiyor.

Apache ve Nginx'i gösteren bir Google Trendler grafiği.

BAŞLIK: Google Trendler'den alınan buradaki mavi çizgi, 2004'ten beri Apache aramalarını temsil ederken kırmızı çizgi Nginx ile ilgilidir.

Apache ve Nginx'in masaya ne getirdiğine gelince, bu konuyla ilgili birkaç kitabı doldurabilir. Ancak, bunu 2.000 kelimenin altında yapmaya çalışacağız – her ikisinin de genel özellik setinden başlayarak.

Apache ve Nginx'in Genel Özellikleri

Apache ve Nginx'in ikisi de HTTP web sunucusu yazılımı olduğundan, birçok benzerlik bulacaksınız. Örneğin, ikisi de açık kaynaklıdır, bu da çeşitli sistemler üzerinde çalışacakları anlamına gelir. Uzantı olarak, her ikisi de esnek ve genişletilebilirdir, ancak her sunucu türü için farklı hedefler vardır.

Bununla birlikte, Apache ve Nginx gerçek bir karşılaştırma değildir, çünkü her iki yazılım parçası da bir web sunucusunu yapılandırma sürecine farklı bir şekilde yaklaşır. Gerçekte, her ikisi de farklı uygulamalara daha iyi uyacaktır.

Bu makalenin geri kalanında, Apache ve Nginx için teknik ayrıntıların bir dökümünü size göstereceğiz. İşte ele alacağımız şey:

  • İstek ve bağlantı işleme, önbelleğe alma teknolojileri ve daha fazlasını içeren her bir sunucu yazılımı türünün teknik dökümü.
  • .htaccess dosyası ve modülleriyle ilgili ayrıntılar dahil olmak üzere Apache'yi yapılandırma ve genişletme.
  • Nginx'i nasıl yapılandırdığınız ve genişletilebilirliği.

Bu dikkate alınması gereken çok fazla görünmüyor, ancak her birini bir dizi başka alt bölüme açabilirsiniz. Teknik farklılıklardan başlayarak tam olarak bunu yapacağız.

Apache ve Nginx Arasındaki Teknik Farklar

Genel anlamda, Apache ve Nginx, optimal bir web sunucusu hedefine ulaşmak için neredeyse benzersiz ve özel yollar kullanır. Her birini geniş bir şekilde karşılaştırırsanız, ne kadar farklı olduklarını göreceksiniz:

  1. Apache 'süreç odaklı' bir mimari kullanırken Nginx 'olay odaklı' bir mimari kullanır.
  2. Her ikisi de sunucu statik dosyalarını (farklı bir şekilde de olsa) yazarken, Nginx dinamik içerik sunmaz.
  3. Her yazılım türü, HTTP isteklerini farklı bir temel yolla yorumlar.

Bağlantı işleme hususlarından başlayarak bu yönlerden bazılarına bakacağız.

Bağlantı İşleme

Apache'nin Nginx'e karşı her türün bağlantıları ve istekleri nasıl ele aldığına çok önem verdiğini göreceksiniz. Örneğin, Apache, mpm_prefork adlı bir işleme modülünü kullanarak her bir iş parçacığı için yeni bir istek oluşturacağı sürece dayalı bir yaklaşım kullanır. İstek sayısı işlem sayısından azsa bu hızlı olabilir, ancak bundan sonra bir performans düşüşü olur.

Aslında Apache, mpm_prefork , mpm_worker ve mpm_event modüllerini kullanarak ihtiyaçlarınıza uygun bir bağlantı işleme algoritması oluşturmak için çok fazla esneklik sunar. Buna karşılık, Nginx'in tasarımı, Apache'nin sahip olduğu olumsuz performans yönlerini azaltmaya çalışacak şekildedir.

Bunu, olaya dayalı bir temelde çalışan süreçleri oluşturma yoluyla yapar. Bu, Nginx'in tek bir iş parçacığı içinde birden çok isteği yönetebildiği için ölçeklendirme için harika olduğu anlamına gelir.

Yorum İste

Hem Apache hem de Nginx, bir sunucunun alacağı istekleri yorumlamak için farklı bir yaklaşım benimser. Örneğin, Nginx, bir isteği dosya sisteminin fiziksel bir öğesine çevirmek için Tekdüzen Kaynak Tanımlayıcısını (URI) kullanır.

Bunu server ve location gibi bazı yapılandırma bloklarının biçiminde görebilirsiniz. Bir URI'yi ayrıştırmak ve onu dosya sistemi içinde bir şeye dönüştürmek için birlikte çalışırlar.

 server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

Buna karşılık, Apache'nin 'saf' bir web sunucusu yazılımı olarak kökleri, her isteğin dosya sisteminde bir kaynak olduğunu varsaydığı ve bu temelde hareket ettiği anlamına gelir. Ancak Apache, isteğin daha soyut olduğu URI'lerle de çalışabilir. Buna rağmen, belgeler, dosya tabanlı yöntemden başka bir yöntemin kullanılmasına karşı uyarıda bulunur.

Statik ve Dinamik Performans

Performans söz konusu olduğunda, Apache ve Nginx hemen hemen her kullanıcı için önemli bir husustur. Bağlamda, karşılaştırma, her bir yazılım türünün statik ve dinamik içeriği nasıl sunduğuna bağlıdır.

Apache'nin doğal mimarisi dosya sistemiyle doğrudan çalıştığı için, statik içerik sunmakta harikadır. Ancak, aynı zamanda, sahip olduğunuz gereksinimlere göre modülleri değiştirmeniz gerektiğinde esnek olan bir benzetme uygulaması olan sunucu içindeki dinamik içeriği de işleyecektir.

Buna karşılık, Nginx herhangi bir dinamik içeriği hiç işlemez. Daha karmaşıktır, çünkü Nginx'in bu istekleri harici bir çalışana veya protokole iletmesi gerekir. Buna rağmen, daha az performans ek yükü olduğunu göreceksiniz ve Nginx daha fazla uyarlanabilirlik ile diğer protokolleri kullanabilir.

Statik içerik için bu, Apache kadar basit olabilir ve bazı durumlarda daha iyi performans gösteren bir seçenek olabilir. Bunun nedeni, Nginx'in sunucu yazılımının genel performansının doğal bir parçası olmak yerine gerektiğinde yorumlayıcıyla iletişim kurabilmesidir.

Apache'nin Dağıtılmış Yapılandırma Modeli

Apache ve Nginx'in sunucu yapılandırmasına farklı yaklaşımları olması şaşırtıcı olmayacaktır. Kısacası, Apache ve Nginx'in konfigürasyonu, bunu bir dizin düzeyinde yapıp yapamayacağınıza bağlıdır.

Apache, dağıtılmış bir model kullanır; bu, sunucuyu dizin bazında yapılandırabileceğiniz anlamına gelir. Bunu .htaccess dosyaları aracılığıyla yapacaksınız. Apache, istenen dosya yolunun her bir bileşenini bir .htaccess dosyası için kontrol edecek ve içindeki yönergeleri yerine getirecektir.

Bazı yeniden yazma kurallarıyla birlikte mod_rewrite modülünü gösteren bir .htaccess dosyası.

Bize göre, bir .htaccess dosyası diğer sistemlerden çok daha esnektir. Bulmak, açmak ve düzenlemek hızlıdır. Çok sayıda güçlü eylemi gerçekleştirmek için parmaklarınızın ucundaki güç büyüktür. Ayrıca, bir Apache sunucusunun, bir .htaccess dosyasını bulduğunda, sunucuyu yeniden yüklemeye gerek kalmadan bir .htaccess dosyasını işleyeceğini de göreceksiniz.

Bazı kullanıcıların, tüm sunucu yapılandırmasını etkilemek için sitelerinin bazı yönlerini kontrol etmesine izin vermeniz gerekiyorsa da harikadır. Bu nedenle Apache sunucuları, esnek modül sistemiyle birlikte paylaşılan barındırma platformlarının temel dayanağıdır.

Apache'nin Modülleri

Apache'yi kullanarak modülleri dinamik olarak yükleyebilir ve kaldırabilirsiniz. Bu, WordPress içindeki eklentileri ve temaları kullanmaya benzer: Temel Apache işlevi temel adımları gerçekleştirirken aktif modüller benzersiz bir deneyim oluşturmanıza yardımcı olur.

Bu modüller çok fazla alanı kapsayabilir ve birçoğu mevcuttur. mod_php gibi modüller sunucunun temel işlevlerini değiştirebilirken, popüler mod_rewrite diğer birçok görevi gerçekleştirmenize izin verir:

  • IP adreslerini kısıtlama.
  • Sitenizin ana klasörünü değiştirme.
  • 301 yönlendirmelerinin yapılması.
  • Varsayılan bir ana sayfa ayarlama.

.htaccess ve dinamik modül sistemi arasında Apache, çoğu kullanıcının bir web sunucusunu ve sitesini düzeltmesi ve optimize etmesi için net bir yol sunar.

Nginx'in Merkezi Yapılandırma Modeli

Nginx, sunucu yapılandırmasına merkezi bir yaklaşım getiriyor. Bu, bir yapılandırma dosyası ( .conf uzantısıyla biten) olduğu anlamına gelir. Sunucu yapınıza bağlı olarak bulmak bazen zor olabilir.

Bunun, bir sunucuda değişiklik yapmak isteyen tomurcuklanan bir site sahibi için bazı açık dezavantajları vardır. Paylaşımlı barındırmadaki siteler için sunucuyu yapılandırmak neredeyse imkansızdır. Ayrıca çok daha az esneklik vardır.

Bununla birlikte, performansa dayalı olarak birkaç avantaj da vardır. Nginx'in bir yapılandırma dosyası için yalnızca bir konumu olduğundan ve Apache potansiyel olarak birden çok konum kullanabileceğinden, yalnızca bir arama olacaktır. Uzantı olarak, bu yapılandırma dosyasını bulmak için de daha az performans isabeti olacaktır.

Ayrıca, yapılandırma merkezi olduğu için site sahiplerinin güvenlikle ilgili hususları yönetme sorumluluğunun olmayacağını da göreceksiniz. Bu, Nginx'in yaklaşımı için başka bir nimettir, çünkü güvenlik sorumluluğu yalnızca sistem yöneticisinin omuzlarındadır.

Nginx'in Modülleri

Aynı türden işlevsellik sunmasına rağmen, Nginx'in modül sisteminin hiçbir yerde Apache kadar serbest veya esnek olmadığını söylemek doğru olur. Örneğin, Nginx'in yönlendirme kurallarını alın:

 server { listen 80; server_name www.olddomain.com; return 301 $scheme://www.newdomain.com$request_uri; }

Bunun nedeni, bunları Nginx ile dinamik öğeler olarak yükleyememenizdir. WordPress benzetmemize geri dönersek, bu, bir eklentiyi devre dışı bırakmak için tüm sitenizi yeniden yüklemek zorunda kalmaya benzer.

Yüzeyde, bu uygulanabilir görünmüyor ve büyük bir zarar gibi görünüyor. Bununla birlikte, esneklikten yoksun olduğunuz şey, temel istikrar ve işlevsellik içinde kazanırsınız. Sunucunuzun derleme zamanında neye ihtiyacı olduğunu biliyorsanız, tüm bu bileşen ve modülleri dahil edebilirsiniz.

Dikkate alınması gereken bir güvenlik yönü de var. Dinamik modülleri sisteminizin içinde ve dışında değiştirmeyeceğiniz için, her öğenin ne yaptığını ve yapabileceğini bileceksiniz. Sunucunuzun yapısını ve mimarisini daha net ve bakımı daha kolay ve aynı zamanda daha performanslı hale getirir.

Neden Apache veya Nginx Kullanırsınız?

Özetlemek gerekirse, Apache vs Nginx kesin bir karar değil. Başlangıç ​​olarak, Nginx'in Apache'den daha iyi performans gösterdiğine dair tipik görüş yanıltıcıdır. Bir Apache sunucusunu iyi kurarsanız, eşdeğer bir Nginx sunucusu kadar performans gösterir.

Apache, hem statik hem de dinamik içeriği basit bir şekilde sunmak için mükemmeldir. Bir sunucuyu yönetmeye yeni başlayanlar için muazzam bir güç, yapılandırmada esneklik sunar. Genel anlamda, bir Apache sunucusunu yapılandırmak için Nginx'ten daha az teknik bilgiye ihtiyacınız olacak.

Ancak performans, Nginx'in parladığı yerdir. Mimarisinin kurulumu, işlemci döngüsü başına bir Apache sunucusundan daha fazlasını elde etmesini sağlar. Bu, kurulumda daha az esnekliğe rağmen.

Bazı durumlarda, özellikle paylaşılan bir ana bilgisayar kullanıyorsanız, Apache ve Nginx arasında seçim yapamayabilirsiniz. Ancak, yaparsanız, seçim uzmanlığınıza, hedeflerinize ve ihtiyaçlarınıza bağlı olacaktır.

Özet

Sunucu yazılımı seçiminiz önemlidir ve emrinizde sayısız seçeneğiniz vardır. Gerçekte, sol alandan bir sunucu türü seçmeyeceksiniz. Bunun yerine, genellikle iki veya üç tür arasından seçim yapacaksınız. Apache ve Nginx, her ikisi de dikkat çekici, uzun vadeli performans ve güvenilirlik sunduğundan, genellikle dikkate alınan bir karşılaştırmadır.

Bu makale, Apache ve Nginx'in bu iki cephede ve daha fazlasında nasıl karşılaştırıldığına baktı. Göz önünde bulundurulması gereken çok sayıda teknik husus vardır ve bu, seçiminizi belirli bir sunucu yazılımının topluluk arasında ne kadar popüler olduğundan daha fazla etkileyecektir.

Apache vs Nginx hakkında bir fikriniz var mı? Aşağıdaki yorumlar bölümünde düşüncelerinizi bizimle paylaşın!