Zašto smatram da je Nginx praktički bolji od Apachea


Prema posljednjem istraživanju web poslužitelja od strane Netcrafta, koje je provedeno krajem 2017. godine, (točnije u studenom), Apache i Nginx su najčešće korišteni open source web poslužitelji na internetu.

Apache je besplatni HTTP poslužitelj otvorenog koda za operativne sustave slične Unixu i Windows. Dizajniran je kao siguran, učinkovit i proširiv poslužitelj koji pruža HTTP usluge u skladu s prevladavajućim HTTP standardima.

Otkako je lansiran, Apache je najpopularniji web poslužitelj na Internetu od 1996. To je de facto standard za web poslužitelje u Linuxu i ekosustavu otvorenog koda. Novi korisnici Linuxa obično ga lakše postavljaju i koriste.

Nginx (izgovara se 'Engine-x') je besplatan, otvorenog koda, HTTP poslužitelj visokih performansi, obrnuti proxy i IMAP/POP3 proxy poslužitelj. Baš kao i Apache, također radi na operativnim sustavima sličnim Unixu i Windowsima.

Dobro poznat po svojim visokim performansama, stabilnosti, jednostavnoj konfiguraciji i maloj potrošnji resursa, s godinama je postao toliko popularan i njegova upotreba na Internetu ide ka sve većim visinama. Sada je web poslužitelj po izboru među iskusnim sistemskim administratorima ili web majstorima vrhunskih stranica.

Neke od prometnih web stranica koje pokreće:

  • Apache su: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com plus puno više.
  • Nginx su: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud i mnogi drugi.

Postoje brojni resursi koji su već objavljeni na webu u vezi s usporedbom između Apache i Nginx (stvarno mislim na članke 'Apache protiv Nginxa'), mnogi koji jasno objašnjavaju u detalje, njihove glavne značajke i operacije u različitim scenarijima uključujući mjere performansi u laboratorijskim referentnim vrijednostima. Stoga se o tome ovdje neće govoriti.

Jednostavno ću podijeliti svoje iskustvo i razmišljanja o cijeloj raspravi, nakon što sam isprobao Apache i Nginx, oba u proizvodnim okruženjima temeljenim na zahtjevima za hosting modernih web aplikacija, u sljedećem odjeljak.

Razlozi zašto smatram da je Nginx praktički bolji od Apachea

Slijede razlozi zašto preferiram Nginx web poslužitelj u odnosu na Apache za isporuku modernog web sadržaja:

1. Nginx je lagan

Nginx jedan je od laganih web poslužitelja. Ima mali otisak na sustavu u usporedbi s Apacheom koji implementira širok opseg funkcionalnosti potrebnih za pokretanje aplikacije.

Budući da Nginx spaja pregršt osnovnih značajki, oslanja se na namjenske uzvodne web poslužitelje trećih strana kao što su Apache backend, FastCGI, Memcached, SCGI i uWSGI poslužitelji ili aplikacijski poslužitelji, tj. poslužitelji specifični za jezik kao što su Node.js, Tomcat itd.

Stoga je njegova upotreba memorije mnogo prikladnija za implementaciju ograničenih resursa nego Apache.

2. Nginx je dizajniran za visoku konkurentnost

Za razliku od Apacheove arhitekture usmjerene na niti ili procese (model proces-po-vezi ili model nit-po-vezi), Nginx koristi skalabilnu (asinkronu) arhitekturu vođenu događajima. Zapošljava model odgovornog procesa koji je prilagođen raspoloživim hardverskim resursima.

Ima glavni proces (koji izvodi privilegirane operacije kao što je čitanje konfiguracije i vezanje na portove) i koji stvara nekoliko radnih i pomoćnih procesa.

Radnički procesi mogu rukovati tisućama HTTP veza istovremeno, čitati i pisati sadržaj na disk i komunicirati s uzvodnim poslužiteljima. Pomoćni procesi (upravitelj predmemorije i učitavač predmemorije) mogu upravljati operacijama predmemoriranja sadržaja na disku.

To čini njegove operacije skalabilnim, što rezultira visokim performansama. Ovaj pristup dizajnu dodatno ga čini brzim, povoljnim za moderne primjene. Osim toga, moduli trećih strana mogu se koristiti za proširenje izvornih funkcionalnosti u Nginxu.

3. Nginx se lako konfigurira

Nginx ima jednostavnu strukturu konfiguracijske datoteke, što ga čini iznimno lakim za konfiguriranje. Sastoji se od modula koji su kontrolirani direktivama navedenim u konfiguracijskoj datoteci. Nadalje, direktive se dijele na blok direktive i jednostavne direktive.

Direktiva bloka definirana je vitičastim zagradama ({ i }). Ako blok direktiva može imati druge direktive unutar zagrada, to se zove kontekst kao što su događaji, http, poslužitelj i lokacija.

http {
	server {
		
	}
}

Jednostavna direktiva sastoji se od naziva i parametara odvojenih razmacima i završava točkom i zarezom (;).

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

		}
		
	}
}

Na primjer, možete uključiti prilagođene konfiguracijske datoteke pomoću direktive uključivanja.

http {
	server {

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

Praktičan primjer za mene bio je kako sam uspio jednostavno konfigurirati Nginx za pokretanje više web stranica s različitim PHP verzijama, što je bio mali izazov s Apacheom.

4. Nginx je izvrstan Frontend proxy

Jedna od uobičajenih upotreba Nginxa je njegovo postavljanje kao proxy poslužitelja, u ovom slučaju on prima HTTP zahtjeve od klijenata i prosljeđuje ih proxy ili uzvodnim poslužiteljima koji su gore spomenuti, preko različitih protokola. Također možete izmijeniti zaglavlja zahtjeva klijenta koja se šalju proxy poslužitelju i konfigurirati spremanje u međuspremnik odgovora koji dolaze s proxy poslužitelja.

Zatim prima odgovore od proxy poslužitelja i prosljeđuje ih klijentima. Mnogo ga je lakše konfigurirati kao proxy poslužitelj u usporedbi s Apacheom jer su potrebni moduli u većini slučajeva omogućeni prema zadanim postavkama.

5. Nginx je izvanredan za posluživanje statičkog sadržaja

Statički sadržaj ili datoteke obično su datoteke pohranjene na disku poslužiteljskog računala, na primjer CSS datoteke, JavaScript datoteke ili slike. Razmotrimo scenarij u kojem koristite Nginx kao sučelje za Nodejs (poslužitelj aplikacija).

Iako Nodejs poslužitelj (posebno Node okviri) imaju ugrađene značajke za rukovanje statičkim datotekama, ne trebaju provoditi neku intenzivnu obradu za isporuku nedinamičkog sadržaja, stoga je praktično korisno konfigurirati web poslužitelj za posluživanje statičnog sadržaja izravno klijentima.

Nginx može mnogo bolje rukovati statičkim datotekama iz određenog direktorija i može spriječiti da zahtjevi za statička sredstva guše uzvodne procese poslužitelja. Ovo značajno poboljšava ukupne performanse pozadinskih poslužitelja.

6. Nginx je učinkovit Load Balancer

Da bi se ostvarile visoke performanse i vrijeme neprekidnog rada za moderne web aplikacije, može biti potrebno pokretanje više instanci aplikacija na jednom ili distribuiranom HTTP poslužitelju. To zauzvrat može zahtijevati postavljanje balansiranja opterećenja za raspodjelu opterećenja između vaših HTTP poslužitelja.

Danas je uravnoteženje opterećenja postalo naširoko korišten pristup za optimiziranje iskorištenja resursa operativnog sustava, maksimiziranje fleksibilnosti, smanjenje latencije, povećanje propusnosti, postizanje redundancije i uspostavljanje konfiguracija otpornih na greške – u više instanci aplikacije.

Nginx koristi sljedeće metode balansiranja opterećenja:

  • round-robin (zadana metoda) – zahtjevi prema uzvodnim poslužiteljima distribuiraju se na kružni način (po redoslijedu popisa poslužitelja u uzlaznom skupu).
  • najmanje povezan – ovdje se sljedeći zahtjev prosljeđuje poslužitelju s najmanjim brojem aktivnih veza.
  • ip-hash – ovdje se koristi hash funkcija za određivanje poslužitelja koji treba odabrati za sljedeći zahtjev (na temelju IP adrese klijenta).
  • Generički hash – prema ovoj metodi, administrator sustava navodi hash (ili ključ) s danim tekstom, varijablama zahtjeva ili vremena izvođenja ili njihovom kombinacijom. Na primjer, ključ može biti izvorni IP i port ili URI. Nginx potom raspodjeljuje opterećenje među uzvodnim poslužiteljima generiranjem hash-a za trenutni zahtjev i stavljanjem ga na uzvodne poslužitelje.
  • Najmanje vrijeme (Nginx Plus) – dodjeljuje sljedeći zahtjev uzvodnom poslužitelju s najmanjim brojem trenutnih veza, ali daje prednost poslužiteljima s najnižim prosječnim vremenom odgovora.

7. Nginx je visoko skalabilan

Nadalje, Nginx je visoko skalabilan, a moderne web aplikacije, posebno poslovne aplikacije, zahtijevaju tehnologiju koja pruža visoke performanse i skalabilnost.

Jedna tvrtka koja ima koristi od nevjerojatnih značajki skalabilnosti Nginxa je CloudFlare, uspjela je skalirati svoje web aplikacije da obrade više od 15 milijardi mjesečnih pregleda stranica s relativno skromnom infrastrukturom, prema Matthewu Princeu, suosnivač i izvršni direktor tvrtke CloudFare.

Za opsežnije objašnjenje pogledajte ovaj članak na Nginx blogu: NGINX protiv Apachea: Naš pogled na desetljeće staro pitanje.

Zaključak

I Apache i Nginx ne mogu se međusobno zamijeniti, imaju svoje jake i slabe strane. Međutim, Nginx nudi moćnu, fleksibilnu, skalabilnu i sigurnu tehnologiju za pouzdano i učinkovito napajanje modernih web stranica i web aplikacija. Što mislite? Javite nam putem obrasca za povratne informacije u nastavku.