Neden Nginx'i Apache'den Pratik Olarak Daha İyi Buluyorum?


Netcraft'ın 2017 yılının sonlarına doğru (tam olarak Kasım ayında) gerçekleştirdiği son web sunucusu araştırmasına göre Apache ve Nginx, internette en yaygın kullanılan açık kaynaklı web sunucularıdır.

Apache, Unix benzeri işletim sistemleri ve Windows için ücretsiz, açık kaynaklı bir HTTP sunucusudur. Geçerli HTTP standartlarıyla senkronize HTTP hizmetleri sağlayan güvenli, verimli ve genişletilebilir bir sunucu olacak şekilde tasarlanmıştır.

Apache, piyasaya sürülmesinden bu yana 1996'dan bu yana İnternet'teki en popüler web sunucusu oldu. Linux ve açık kaynak ekosistemindeki Web sunucuları için fiili standarttır. Yeni Linux kullanıcıları normalde kurulumu ve kullanımı daha kolay buluyor.

Nginx ('Engine-x' olarak telaffuz edilir) ücretsiz, açık kaynaklı, yüksek performanslı bir HTTP sunucusu, ters proxy ve IMAP/POP3 proxy sunucusudur. Tıpkı Apache gibi Unix benzeri işletim sistemlerinde ve Windows'ta da çalışır.

Yüksek performansı, kararlılığı, basit yapılandırması ve düşük kaynak tüketimiyle tanınan bu yazılım, yıllar içinde çok popüler hale geldi ve İnternet'teki kullanımı daha da yüksek seviyelere doğru ilerliyor. Artık deneyimli sistem yöneticilerinin veya en iyi sitelerin web yöneticilerinin tercih ettiği web sunucusudur.

Yoğun sitelerden bazıları:

  • Apache şunlardır: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com ve çok daha fazlası.
  • Nginx şunlardır: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud ve diğerleri.

Apache ve Nginx arasındaki karşılaştırmayla ilgili olarak internette zaten yayınlanmış çok sayıda kaynak var (gerçekten 'Apache Ve Nginx makalelerini kastediyorum), birçoğu Laboratuvar kıyaslamalarındaki performans ölçümleri de dahil olmak üzere çeşitli senaryolar altında bunların en iyi özellikleri ve işlemleri ayrıntılı olarak açık bir şekilde açıklanmaktadır. Bu nedenle burada bu konuya değinilmeyecektir.

Modern web uygulamalarını barındırma gereksinimlerine dayalı olarak üretim ortamlarında Apache ve Nginx'i denedikten sonra, tüm tartışma hakkındaki deneyimimi ve düşüncelerimi bir sonraki yazıda paylaşacağım. bölüm.

Nginx'i Apache'den Pratik Olarak Daha İyi Bulmamın Nedenleri

Modern web içeriği dağıtımı için Apache yerine Nginx web sunucusunu tercih etmemin nedenleri şunlardır:

1. Nginx Hafiftir

Nginx piyasadaki hafif web sunucularından biridir. Bir uygulamayı çalıştırmak için gerekli geniş kapsamlı işlevsellik uygulayan Apache'ye kıyasla sistemde daha az yer kaplar.

Nginx bir dizi temel özelliği bir araya getirdiği için Apache arka ucu, FastCGI, Memcached, SCGI ve uWSGI sunucuları veya uygulama sunucusu gibi özel üçüncü taraf yukarı akış web sunucularına, yani Node.js, Tomcat gibi dile özgü sunuculara dayanır. , vesaire.

Bu nedenle bellek kullanımı sınırlı kaynak dağıtımları için Apache'e göre çok daha uygundur.

2. Nginx Yüksek Eşzamanlılık için Tasarlanmıştır

Apache'nin iş parçacığı veya süreç odaklı mimarisinin (bağlantı başına işlem veya bağlantı başına iş parçacığı modeli) aksine, Nginx ölçeklenebilir, olaya dayalı (eşzamansız) bir mimari kullanır. Mevcut donanım kaynaklarına göre uyarlanmış sorumlu bir süreç modeli kullanır.

Bir ana işlemi vardır (yapılandırmanın okunması ve bağlantı noktalarına bağlanma gibi ayrıcalıklı işlemleri gerçekleştirir) ve çeşitli çalışan ve yardımcı işlemler oluşturur.

Çalışan süreçlerin her biri aynı anda binlerce HTTP bağlantısını yönetebilir, içeriği diske okuyup yazabilir ve yukarı akış sunucularıyla iletişim kurabilir. Yardımcı işlemler (önbellek yöneticisi ve önbellek yükleyici), diskteki içeriği önbelleğe alma işlemlerini yönetebilir.

Bu, operasyonlarını ölçeklenebilir hale getirir ve yüksek performans sağlar. Bu tasarım yaklaşımı onu daha da hızlı ve modern uygulamalara uygun hale getiriyor. Ayrıca Nginx'teki yerel işlevleri genişletmek için üçüncü taraf modüller kullanılabilir.

3. Nginx'in Yapılandırılması Kolaydır

Nginx'in basit bir yapılandırma dosyası yapısı vardır, bu da yapılandırmayı son derece kolaylaştırır. Yapılandırma dosyasında belirtilen direktiflerle kontrol edilen modüllerden oluşur. Ayrıca direktifler blok direktifler ve basit direktifler olarak ikiye ayrılır.

Bir blok yönergesi parantezlerle ({ ve ) tanımlanır. Bir blok direktifinin parantez içinde başka direktifleri varsa buna olaylar, http, sunucu ve konum gibi bağlam denir.

http {
	server {
		
	}
}

Basit bir yönerge, boşluklarla ayrılmış ad ve parametrelerden oluşur ve noktalı virgül (;) ile biter.

http {
	server {
		location / {
				
				## this is simple directive called root
			   	root  /var/www/hmtl/example.com/;

		}
		
	}
}

Örneğin include yönergesini kullanarak özel yapılandırma dosyalarını dahil edebilirsiniz.

http {
	server {

	}
	## examples of including additional config files
	include  /path/to/config/file/*.conf;
	include  /path/to/config/file/ssl.conf;
}

Benim için pratik bir örnek, Nginx'i farklı PHP sürümleriyle birden fazla web sitesini çalıştıracak şekilde nasıl kolayca yapılandırmayı başardığımdı; bu Apache için biraz zorlayıcıydı.

4. Nginx Mükemmel Bir Ön Uç Proxy'sidir

Nginx'in yaygın kullanımlarından biri, onu bir proxy sunucusu olarak ayarlamaktır; bu durumda istemcilerden HTTP isteklerini alır ve bunları farklı protokoller üzerinden yukarıda bahsedilen proxy veya yukarı akış sunucularına iletir. Ayrıca proxy sunucuya gönderilen istemci istek başlıklarını değiştirebilir ve proxy sunuculardan gelen yanıtların ara belleğe alınmasını yapılandırabilirsiniz.

Daha sonra proxy sunuculardan yanıtlar alır ve bunları istemcilere iletir. Gerekli modüller çoğu durumda varsayılan olarak etkin olduğundan, proxy sunucusu olarak yapılandırmak Apache'ye kıyasla çok daha kolaydır.

5. Nginx, Statik İçerik Sunma Açısından Dikkat Çekicidir

Statik içerik veya dosyalar genellikle sunucu bilgisayarın diskinde depolanan dosyalardır; örneğin CSS dosyaları, JavaScript dosyaları veya resimler. Nginx'i Nodejs (uygulama sunucusu) için ön uç olarak kullandığınız bir senaryoyu ele alalım.

Her ne kadar Nodejs sunucusu (özellikle Node çerçeveleri) statik dosya işleme için yerleşik özelliklere sahip olsa da, dinamik olmayan içerik sunmak için yoğun işlemler yapmalarına gerek yoktur, bu nedenle web sunucusunu statik içeriği doğrudan sunucuya sunacak şekilde yapılandırmak pratik olarak faydalıdır. Müşteriler.

Nginx, belirli bir dizindeki statik dosyaları işleme konusunda çok daha iyi bir iş çıkarabilir ve statik varlıklara yönelik isteklerin yukarı akış sunucu işlemlerini engellemesini önleyebilir. Bu, arka uç sunucuların genel performansını önemli ölçüde artırır.

6. Nginx Verimli Bir Yük Dengeleyicidir

Modern web uygulamaları için yüksek performans ve çalışma süresini gerçekleştirmek, tek veya dağıtılmış bir HTTP sunucusunda birden fazla uygulama örneğinin çalıştırılmasını gerektirebilir. Bu da yükü HTTP sunucularınız arasında dağıtmak için yük dengelemeyi ayarlamayı gerektirebilir.

Günümüzde yük dengeleme, birden fazla uygulama örneğinde işletim sistemi kaynak kullanımını optimize etmek, esnekliği en üst düzeye çıkarmak, gecikmeyi azaltmak, verimi artırmak, yedekliliğe ulaşmak ve hataya dayanıklı yapılandırmalar oluşturmak için yaygın olarak kullanılan bir yaklaşım haline geldi.

Nginx aşağıdaki yük dengeleme yöntemlerini kullanır:

  • bir kez deneme (varsayılan yöntem) - yukarı akış sunucularına yapılan istekler, bir kez deneme yöntemiyle (yukarı akış havuzundaki sunucuların listesine göre) dağıtılır.
  • en az bağlantılı - burada bir sonraki istek, en az sayıda etkin bağlantıya sahip sunucuya proxy olarak aktarılır.
  • ip-hash – burada bir sonraki istek için hangi sunucunun seçilmesi gerektiğini belirlemek için bir karma işlevi kullanılır (istemcinin IP adresine göre).
  • Genel karma – bu yöntemde, sistem yöneticisi verilen metinle, istek veya çalışma zamanının değişkenleriyle veya bunların birleşimiyle bir karma (veya anahtar) belirtir. Örneğin anahtar bir kaynak IP'si ve bağlantı noktası veya URI olabilir. Nginx daha sonra mevcut istek için bir karma oluşturup bunu yukarı akış sunucularına yerleştirerek yükü yukarı akış sunucuları arasında dağıtır.
  • En az süre (Nginx Plus) – bir sonraki isteği en az sayıda geçerli bağlantıya sahip yukarı akış sunucusuna atar ancak en düşük ortalama yanıt süresine sahip sunucuları tercih eder.

7. Nginx Yüksek Derecede Ölçeklenebilir

Ayrıca, Nginx oldukça ölçeklenebilirdir ve modern web uygulamaları, özellikle kurumsal uygulamalar, yüksek performans ve ölçeklenebilirlik sağlayan teknolojiye ihtiyaç duyar.

Nginx'in şaşırtıcı ölçeklenebilirlik özelliklerinden yararlanan şirketlerden biri de CloudFlare'dir. Matthew Prince 'e göre, nispeten mütevazı bir altyapıyla web uygulamalarını aylık 15 milyardan fazla sayfa görüntülemeyi yönetecek şekilde ölçeklendirmeyi başardı. Strong, CloudFare'in kurucu ortağı ve CEO'su.

Daha kapsamlı bir açıklama için Nginx blogundaki şu makaleye göz atın: NGINX vs. Apache: On Yıllık Soruya Bakış Açımız.

Çözüm

Hem Apache hem de Nginx birbirlerinin yerini alamaz; onların güçlü ve zayıf noktaları vardır. Ancak Nginx, modern web sitelerini ve web uygulamalarını güvenilir ve verimli bir şekilde desteklemek için güçlü, esnek, ölçeklenebilir ve güvenli bir teknoloji sunar. Ne düşünüyorsunuz? Aşağıdaki geri bildirim formunu kullanarak bize bildirin.