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


Prema najnovijem istraživanju web servera od strane Netcrafta, koje je sprovedeno krajem 2017. godine (tačnije u novembru), Apache i Nginx su najčešće korišteni web serveri otvorenog koda na internetu.

Apache je besplatan HTTP server otvorenog koda za operativne sisteme slične Unixu i Windows. Dizajniran je da bude siguran, efikasan i proširiv server koji pruža HTTP usluge u skladu sa preovlađujućim HTTP standardima.

Od kada je lansiran, Apache je bio najpopularniji web server na Internetu od 1996. To je de facto standard za web servere u Linuxu i ekosistemu otvorenog koda. Novim korisnicima Linuxa obično je lakše postaviti i koristiti.

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

Dobro poznat po svojim visokim performansama, stabilnosti, jednostavnoj konfiguraciji i maloj potrošnji resursa, tokom godina je postao toliko popularan i njegova upotreba na Internetu ide ka većoj visini. Sada je web server po izboru među iskusnim sistem administratorima ili web majstorima vrhunskih sajtova.

Neke od prometnih web lokacija koje pokreće:

  • Apache su: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com i još mnogo toga.
  • Nginx su: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud i mnogi drugi.

Na webu su već objavljeni brojni resursi koji se odnose na poređenje između Apache i Nginxa (stvarno mislim na članke 'Apache protiv Nginx'), mnogi od kojih jasno objašnjavaju u detalje, njihove glavne karakteristike i operacije pod različitim scenarijima, uključujući mjere performansi u laboratorijskim mjerilima. Stoga se o tome ovdje nećemo govoriti.

Jednostavno ću podijeliti svoje iskustvo i razmišljanja o cijeloj debati, nakon što sam isprobao Apache i Nginx, oba u proizvodnim okruženjima na osnovu zahtjeva za hostovanje 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 server u odnosu na Apache za isporuku modernog web sadržaja:

1. Nginx je lagan

Nginx je jedan od laganih web servera. Ima male otiske na sistemu u poređenju sa Apacheom koji implementira širok opseg funkcionalnosti neophodnih za pokretanje aplikacije.

Budući da Nginx objedinjuje pregršt osnovnih funkcija, oslanja se na namjenske uzvodne web servere treće strane kao što su Apache backend, FastCGI, Memcached, SCGI i uWSGI serveri ili serveri aplikacija, tj. serveri specifični za jezik kao što su Node.js, Tomcat , itd.

Stoga je njegova upotreba memorije daleko pogodnija za primjenu ograničenih resursa nego Apache.

2. Nginx je dizajniran za visoku konkurentnost

Za razliku od Apacheove arhitekture usmjerene na niti ili proces (proces-po-vezi ili nit-po-vezi model), Nginx koristi skalabilnu arhitekturu vođenu događajima (asinhronu). Koristi model odgovornog procesa koji je prilagođen dostupnim hardverskim resursima.

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

Radnički procesi mogu istovremeno rukovati hiljadama HTTP konekcija, čitati i pisati sadržaj na disk i komunicirati sa uzvodnim serverima. Pomoćni procesi (upravljač kešom i učitavač keša) mogu upravljati operacijama keširanja sadržaja na disku.

To čini njegove operacije skalabilnim i rezultira visokim performansama. Ovaj pristup dizajnu dodatno ga čini brzim, pogodnim za moderne aplikacije. Osim toga, moduli treće strane mogu se koristiti za proširenje izvornih funkcionalnosti u Nginxu.

3. Nginx se lako konfiguriše

Nginx ima jednostavnu strukturu konfiguracijskog fajla, što ga čini vrlo jednostavnim za konfiguriranje. Sastoji se od modula koji su kontrolirani direktivama navedenim u konfiguracijskoj datoteci. Osim toga, direktive se dijele na blok direktive i jednostavne direktive.

Blok direktiva je definirana zagradama ({ i }). Ako blok direktiva može imati druge direktive unutar zagrada, naziva se kontekst kao što su događaji, http, server i lokacija.

http {
	server {
		
	}
}

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

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

		}
		
	}
}

Možete uključiti prilagođene konfiguracijske datoteke koristeći, na primjer, direktivu uključivanja.

http {
	server {

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

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

4. Nginx je odličan Frontend proxy

Jedna od uobičajenih upotreba Nginx-a je postavljanje kao proxy server, u ovom slučaju prima HTTP zahtjeve od klijenata i prosljeđuje ih proksi serverima ili upstream serverima koji su gore spomenuti, preko različitih protokola. Također možete modificirati zaglavlja zahtjeva klijenta koja se šalju proksi serveru i konfigurirati baferovanje odgovora koji dolaze sa proksi servera.

Zatim prima odgovore od proksi servera i prosljeđuje ih klijentima. Lakše je konfigurisati kao proxy server u poređenju sa Apacheom jer su potrebni moduli u većini slučajeva omogućeni po defaultu.

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

Statički sadržaj ili datoteke su obično datoteke pohranjene na disku na serverskom računaru, na primjer CSS datoteke, JavaScript datoteke ili slike. Hajde da razmotrimo scenario u kojem koristite Nginx kao frontend za Nodejs (server aplikacija).

Iako Nodejs server (posebno okviri Node) imaju ugrađene funkcije za statičko rukovanje datotekama, ne moraju vršiti neku intenzivnu obradu da bi isporučili nedinamički sadržaj, stoga je praktično korisno konfigurirati web server da služi statički sadržaj direktno na klijentima.

Nginx može obaviti mnogo bolji posao rukovanja statičkim datotekama iz određenog direktorija i može spriječiti zahtjeve za statičkim sredstvima da guše procese servera uzvodno. Ovo značajno poboljšava ukupne performanse backend servera.

6. Nginx je efikasan balansator opterećenja

Za postizanje visokih performansi i vremena neprekidnog rada za moderne web aplikacije može biti potrebno pokretanje više instanci aplikacije na jednom ili distribuiranom HTTP serveru. Ovo zauzvrat može zahtijevati postavljanje balansiranja opterećenja za distribuciju opterećenja između vaših HTTP servera.

Danas je balansiranje opterećenja postalo široko korišten pristup za optimizaciju korištenja resursa operativnog sistema, maksimiziranje fleksibilnosti, smanjenje kašnjenja, povećanje propusnosti, postizanje redundantnosti i uspostavljanje konfiguracija otpornih na greške – u više instanci aplikacije.

Nginx koristi sljedeće metode balansiranja opterećenja:

  • round-robin (podrazumevana metoda) – zahtjevi upstream serverima se distribuiraju na kružni način (po redoslijedu liste servera u upstream bazenu).
  • najmanje povezan – ovdje je sljedeći zahtjev proksi serveru s najmanjim brojem aktivnih veza.
  • ip-hash – ovdje se koristi hash-funkcija za određivanje koji server treba odabrati za sljedeći zahtjev (na osnovu IP adrese klijenta).
  • Generički hash – pod ovom metodom, administrator sistema specificira hash (ili ključ) sa datim tekstom, varijablama zahtjeva ili runtimea, ili njihovom kombinacijom. Na primjer, ključ može biti izvorna IP adresa i port ili URI. Nginx zatim raspoređuje opterećenje među uzvodnim serverima generišući hash za trenutni zahtjev i postavljajući ga na uzvodne servere.
  • Najmanje vrijeme (Nginx Plus) – dodjeljuje sljedeći zahtjev uzvodnom serveru s najmanjim brojem trenutnih veza, ali daje prednost serverima s najnižim prosječnim vremenom odgovora.

7. Nginx je visoko skalabilan

Nadalje, Nginx je vrlo skalabilna i moderna web aplikacija, posebno poslovne aplikacije koje zahtijevaju tehnologiju koja pruža visoke performanse i skalabilnost.

Jedna kompanija koja ima koristi od Nginxovih nevjerovatnih karakteristika skalabilnosti je CloudFlare, uspjela je skalirati svoje web aplikacije tako da obrađuje više od 15 milijardi mjesečnih pregleda stranica uz relativno skromnu infrastrukturu, prema Matthewu Princeu, suosnivač i izvršni direktor CloudFare.

Za opsežnije objašnjenje, pogledajte ovaj članak na Nginx blogu: NGINX vs. Apache: Naš pogled na pitanje starog desetljeća.

Zaključak

I Apache i Nginx ne mogu se zamijeniti jedni drugima, oni imaju svoje jake i slabe strane. Međutim, Nginx nudi moćnu, fleksibilnu, skalabilnu i sigurnu tehnologiju za pouzdano i efikasno pokretanje modernih web stranica i web aplikacija. Šta mislite? Obavijestite nas putem obrasca za povratne informacije u nastavku.