Natrag na blog

Svijet web poslužitelja: Apache protiv Nginxa

Svijet web poslužitelja: Apache protiv Nginxa

Uvod u Apache i Nginx

Web poslužitelji i protokoli dizajnirani su kako bi korisnicima omogućili pregledavanje web stranica. Oni šalju zahtjev za pregled dokumenta koji poslužitelj prihvaća. Domaćin zatim u biti poslužuje dokument ili informacije gledatelju. Web poslužitelj igra ključnu ulogu u omogućavanju pregledavanja i pristupa web stranicama na vašem pregledniku.

web server

Web poslužitelj koji olakšava komunikaciju između klijenta i aplikacijskih poslužitelja

Postoji mnogo web poslužitelja koje možete koristiti u tu svrhu. Među najpopularnijima su Nginx i Apache. Zapravo, ovi poslužitelji udomljuju većinu web stranica koje su trenutno dostupne na internetu.

Apache i Nginx prilično su slični na mnogo načina. Za početak, oba web poslužitelja su otvorenog koda. To znači da ih svatko na svijetu može koristiti potpuno besplatno. No, postoje mnoge značajke koje su jedinstvene za svaki od poslužitelja. Te ih posebne karakteristike čine najprikladnijima za različite primjene i svrhe.

Kako bismo vam pomogli odlučiti koji je web poslužitelj bolji ili idealan za vas, usporedit ćemo Nginx i Apache. Usporedba će se provesti kroz niz bitnih parametara koji su ključni za korisnike web poslužitelja. Počnimo!

Osnovni pregled

Započet ćemo s općim pregledom dvaju web poslužitelja. I Apache i Nginx izgradili su sjajnu reputaciju u zajednici. Hvaljeni su zbog svojih performansi i koriste ih brojne poznate organizacije diljem svijeta.

Apache

Apache se pojavio 1995. godine. Robert McCool razvio je ovaj HTTP poslužitelj pod the Apache Software Foundation, otuda i naziv. Od njegova objavljivanja, stotine tisuća ljudi diljem svijeta koriste Apache.

Njegova golema popularnost znači da s njim često surađuje mnogo softvera i izvora trećih strana. Stoga, ako tražite dobru mrežu podrške s puno integracija, Apache je pravi izbor za vas. Apache je također poželjniji za many ljude jer je dinamičniji i fleksibilniji. Također nudi veći raspon jezika koje može interpretirati.

Nginx

Nginx je relativno noviji web poslužitelj, koji se pojavio 2004. godine. Rezultat je napora Igora Syoseva da se riješi problem koji je danas poznat kao problem C10K. Ovaj se problem pojavio kada je poslužiteljima postalo teško nositi se s velikom količinom prometa. Kako je sve više ljudi počelo koristiti internet, poslužitelji web stranica počeli su se preopterećivati. Nemogućnost ovih poslužitelja da istovremeno obrađuju nekoliko tisuća veza uzrokovala je pad i otkazivanje web stranica.

Nginx je objavljen kako bi se pokušao riješiti ovaj problem. Zato njegova arhitektura ima nevjerojatno lagan dizajn, koji može raditi s ograničenim resursima i hardverom. Iako je najprikladniji za rad sa statičkim sadržajem, može se integrirati i sa softverom koji može na odgovarajući način rukovati i dinamičkim sadržajem.

Mogućnosti upravljanja prometom

Sada kada imamo osnovnu predodžbu o svakom od poslužitelja, možemo zaroniti u detalje. Prva značajka s kojom ćemo započeti su mogućnosti upravljanja prometom pojedinačnih poslužitelja. Ovo je jedna od glavnih točaka koja razlikuje ove dvije platforme. Njihove arhitekture rade na različitim principima kada je u pitanju istovremeno rukovanje s više veza.

Apache

Apache koristi nešto što se zove MPM- Multi-Processing ModulesAdministratori koriste različite MPM-ove za manipuliranje i modificiranje arhitekture upravljanja vezama. Dio privlačnosti Apache web poslužitelja je fleksibilnost koju nudi njegova arhitektura. Takva infrastruktura temeljena na modulima koja dijeli obradu na pojedinačne i grupe dretvi olakšava skaliranje i prilagodbu različitim vrstama veza.

Pogledajmo neke od pojedinačnih modula koji se koriste u Apacheu:

  • mpm_prefork

Prvi je mpm_prefork. To je modul za obradu koji je odgovoran za upravljanje dolaznim zahtjevima posjetitelja. Stvara jednu dretvu ili podproces za upravljanje jednom vezom u bilo kojem trenutku. To znači da ako je broj zahtjeva manji od broja procesa, mpm_prefork je prilično učinkovit u svojoj funkciji.

Zahtjevi se obrađuju brzo jer zaseban podproces obrađuje svaki pojedinačno. No to također znači da ako broj zahtjeva premaši broj procesa, to može znatno usporiti stvari. Kao rezultat toga, korak obrade zahtjeva troši puno RAM-a.

  • mpm_worker

Kao što već znamo, jedna dretva je odgovorna za jednu vezu. Ovaj modul ide korak dalje i omogućuje vam upravljanje s više dretvi odjednom. Ovo je mnogo skalabilniji modul u usporedbi s mpm_preforkom koji se bori iznad određenog praga. Nove veze mogu se odmah povezati s dretvom umjesto da moraju čekati.

  • mpm_event

Mpm_event je odgovoran za održavanje keep-alive veza. Primarna svrha ovog modula je spriječiti zagušenje sustava zbog keep-alive zahtjeva. To čini tako što dodjeljuje dretvu vezi čak i bez prisutnosti aktivnog zahtjeva. Dretva će ostati posvećena sve dok je veza aktivna. Svi dolazni zahtjevi prenose se na slobodne dretve.

Nginx

Za razliku od Apachea, Nginx je napravljen s vrlo specifičnom svrhom na umu. Već smo znali za probleme koji su se javljali s povezivanjem i skalabilnošću na ovoj razini. Zato koristi algoritam koji je asinkron i neblokirajući. Ne posvećuje pojedinačne dretve svakoj vezi. Umjesto toga, Nginx proizvodi brojne radne procese koji su sposobni upravljati tisućama veza odjednom.

Princip rada iza Nginxove arhitekture je mehanizam brze petlje. Ovaj algoritam neprestano obrađuje događaje i nadzire ih. To znači da su procesi vođeni događajima i svaki je radni proces posvećen samo vlastitim vezama. Sve veze radnog procesa nalaze se u petlji događaja. Ovdje one koegzistiraju i obrađuju se asinkrono s ostalim vezama pod tim određenim radnim procesom.

Glavna prednost takve arhitekture je što omogućuje veliku sposobnost skaliranja. To postaje osobito primjenjivo ako imate ograničene resurse ili želite raditi s minimalnim hardverom. Čak i ako imate veliku količinu prometa, to će imati mali utjecaj na korištenje RAM-a. To je zato što ne generirate pojedinačne dretve za svaku vezu.

Upravljanje statičkim i dinamičkim sadržajem

Još jedan parametar koji možemo koristiti za usporedbu ova dva web poslužitelja je kako upravljaju statičkim i dinamičkim sadržajem.

Apache

Apache koristi metodu temeljenu na datotekama za rad sa statičkim sadržajem. Njegov MPM sustav obrade omogućuje mu rad s ovom konvencionalnom metodom.

Kada je riječ o obradi dinamičkog sadržaja, Apache to može učiniti bez potrebe za pomoći vanjskih komponenti. Dinamičke procesore možete omogućiti učitavanjem modula. Ovaj modul će obraditi sadržaj analizirajući jezik i zatim ugrađujući relevantni procesor u radni proces.

Glavna prednost neupotrebe vanjskih komponenti za obradu dinamičkog sadržaja očita je tijekom konfiguracije i koordinacije. Mnogo je lakše koordinirati samo interne komponente jednu s drugom.

Nginx

Najveća razlika između načina na koji Apache i Nginx upravljaju sadržajem je u tome što Nginx jednostavno nije sposoban interno obrađivati dinamički sadržaj. Mora se upariti s vanjskom komponentom za obradu zahtjeva za dinamičkim sadržajem. To znači da ćete morati koristiti svoj Nginx poslužitelj u kombinaciji s vanjskim procesorom. Komponenta će primiti zahtjev za PHP/dinamičkim sadržajem, obraditi ga i zatim poslati natrag poslužitelju.

Budući da se informacije moraju prenositi između dviju komponenti, morat ćete koordinirati komunikaciju između njih. Morat ćete odrediti koliko veza želite dopustiti i konfigurirati protokol. Morat ćete koristiti protokol koji Nginx može čitati i razumjeti, kao što su HTTP, FastCGI, SCGI, uWSGI ili memcache, između ostalih.

S druge strane, Nginx se stvarno dobro snalazi s rukovanjem statičkim sadržajem. Nije mu potrebna pomoć iz vanjskih izvora da bi to učinio. Također će aktivirati interpreter samo kada mu je potreban. To je jedna od prednosti korištenja Nginxa. Interpreter nije ugrađen u proces. To znači da će biti prisutan samo za obradu dinamičkog sadržaja.

Direktoriji sadržaja: Distribuirana naspram centralizirane konfiguracije

Svaki web poslužitelj ima svoj vlastiti direktorij sadržaja. Jedan od najvažnijih parametara po kojima se procjenjuju Apache i Nginx jest dopuštaju li konfiguraciju na razini direktorija.

Apache

Postoje određene skrivene datoteke u direktorijima sadržaja koje sadrže direktive. To su .htaccess datoteke. S Apacheom možete interpretirati ove direktive na bazi pojedinačnih direktorija. Stoga, kada pošaljete zahtjev, Apache će pregledati putanju do datoteke kako bi pronašao .htaccess datoteku. Kada je pronađe, odmah će interpretirati i primijeniti direktive unutar nje. Apache neće ponovno pokretati poslužitelj kako bi primijenio ove direktive.

Gore definirani proces omogućuje decentraliziranu konfiguraciju direktorija na web poslužitelju. Decentralizirana konfiguracija korisna je za prepisivanje URL-ova, implementaciju ograničenja pristupa, potvrdu autorizacija i postavljanje pravila predmemoriranja.

Jedna od prednosti .htaccess datoteke je ta što korisnik, koji nema autentifikaciju, može kontrolirati i mijenjati barem neki aspekt sadržaja koji gleda u svom pregledniku. Zato Apache često koriste pružatelji usluga dijeljenog hostinga. Pružatelji usluga imaju autorizirani pristup središnjoj konfiguraciji. Klijenti mogu kontrolirati određene direktorije bez pristupa glavnoj konfiguraciji.

Ako želite, možete isključiti interpretaciju .htaccess datoteka u Apacheu.

Nginx

Za razliku od Apachea, Nginx ne radi s .htaccess datotekama. To ga čini relativno manje fleksibilnim. Međutim, Nginx umjesto toga donosi niz poboljšanja u svom stilu konfiguracije. Za početak, sposoban je obrađivati zahtjeve puno brže od Apachea. To je zato što ne traži, ne čita, ne interpretira i zatim ne primjenjuje svaku .htaccess datoteku koju pronađe na svom putu. Umjesto pretraživanja svakog nadređenog direktorija, Nginx vrši samo jedno traženje direktorija po zahtjevu.

Osim toga, Nginx ima veliku sigurnosnu prednost u odnosu na Apache. Nginx ne predaje nikakav dio konfiguracije direktorija sadržaja pojedinačnim korisnicima, za razliku od Apachea. Iako vi možda održavate stroge sigurnosne mjere, tko kaže da su pojedinačni korisnici sposobni činiti isto? S Nginxom zadržavate kontrolu nad sigurnosnim statusom i konfiguracijom cijele mreže direktorija.

Interpretacija zahtjeva

Još jedan način razlikovanja ova dva poslužitelja je način na koji interpretiraju zahtjeve.

Apache

Kada poslužitelj primi zahtjev, on ga interpretira i zatim ga povezuje s odgovarajućim sustavnim resursima. Interpretira zahtjev ili kao fizički resurs na datotečnom sustavu ili kao URI lokaciju.

Kada ga interpretira kao fizički resurs, koristi blokove <Directory> ili <Files>. To je zadana metoda interpretacije za poslužitelj. Uzima korijen dokumenta. Zatim prati host i broj porta u zahtjevu kako bi pronašao odgovarajuću datoteku u stablu dokumenata.

S druge strane, URI lokacija zahtijeva apstraktnu procjenu. Stoga Apache koristi blokove <Location> za apstraktne resurse umjesto rada s datotečnim sustavom.

Postoji niz drugih alternativa korištenju zadanog sustava temeljenog na datotekama osim URI-ja. Na primjer, možete koristiti direktivu Alias kako biste pronašli alternativnu lokaciju za mapiranje. Također možete iskoristiti varijante izraza kako biste konfiguraciju datotečnog sustava učinili fleksibilnijom.

Nginx

Dok je Apache stvoren da bude web poslužitelj, Nginx ima dvostruku ulogu kao web i kao proxy poslužitelj. Zato Nginx, umjesto da se oslanja na datotečni sustav, radije radi s URI-jima. Ovu preferenciju možete uočiti iz činjenice da u Nginx-u ne postoji način za specificiranje konfiguracije za direktorij datotečnog sustava. Međutim, on se može prevesti u datotečni sustav ako i kada je to potrebno.

Server i location su konfiguracijski blokovi koji se prvenstveno koriste u Nginx-u. Prvi interpretira host koji se zahtijeva. Drugi odgovara dijelovima URI-ja nakon hosta i porta. Kao rezultat toga, poslužitelj interpretira zahtjev kao URI lokaciju umjesto kao stvarnu datoteku na sustavu.

Zbog svog sustava interpretacije temeljenog na URI-ju, Nginx može služiti kao web poslužitelj, proxy poslužitelj i poslužitelj e-pošte. Budući da se ne odnosi na datotečni sustav prilikom interpretacije zahtjeva, razumljivo je zašto ne implementira ni .htaccess datoteke.

Sustavi modula

Iako i Apache i Nginx nude podršku za sustave modula za proširenje, postoje neke velike razlike u njihovom unutarnjem radu.

Apache

S Apacheom možete dinamički učitavati i uklanjati module prilikom pokretanja poslužitelja. Jezgra ostaje u središtu procesa, a moduli služe za proširenje funkcionalnosti. Ove spojive module možete koristiti za obavljanje niza zadataka. Opcije su praktički beskrajne uz Apacheovu golemu biblioteku.

Zapravo, možete čak i modificirati funkciju jezgre poslužitelja koristeći module poput  mod_php. Kao što smo već spomenuli, ovaj modul vam omogućuje ugradnju PHP interpretera u pojedinačne radne procese. To je korisno kada trebate obraditi dinamički sadržaj.

But the story does not end there. Također možete dodati module kako biste omogućili funkcije kao što su autentifikacija klijenta, jačanje sigurnosti poslužitelja, predmemoriranje, prepisivanje URL-ova, proxyji, ograničavanje brzine, kompresija, kao i enkripcija.

Nginx

Sustav modula u Nginx-u razlikuje se po tome što ne možete dinamički učitati module na glavni poslužitelj. Umjesto toga, oni se moraju prikupiti i kompajlirati na softveru jezgre. To ostavlja mnogo toga za poželjeti u pogledu fleksibilnosti i jednostavnosti korištenja. Iako distribucijski paketi sadrže neke uobičajene module, morat ćete izgraditi poslužitelj za druge module. Stoga morate znati kako održavati svoj kompajlirani softver izvan tradicionalnog sustava pakiranja.

Bez obzira na to, prednost ovog nestandardnog sustava modula je u tome što vam daje visok stupanj specifičnosti. Svoje module možete prilagoditi tako da uključite samo one funkcionalnosti koje su vam potrebne. To vam omogućuje da ostavite iza sebe komponente koje vam ne trebaju i usput se spasite od sigurnosnog rizika. Istovremeno, s Nginx modulima možete obavljati iste zadatke kao i s Apacheom. To uključuje prepisivanje URL-ova, bilježenje, autentifikaciju i tako dalje.

Ekosustav i podrška

Integracije i softverska podrška vrlo su važni kada su u pitanju web poslužitelji. Zatim ćemo istražiti kompatibilnost i podršku koja je dostupna za Apache i Nginx.

Apache

Apache je starija i popularnija platforma. Stoga je razumljivo da ima veći niz pratećih alata i softvera u usporedbi s Nginx-om. Na raspolaganju vam je mnoštvo dokumentacije trećih strana za podršku jezgri poslužitelja. I ne samo to, već ga možete upariti i s drugim softverom za obavljanje specifičnih zadataka. Ove alate možete dodati svom projektu ili svom paketu. Oni se mogu lako pokrenuti unutar Apache ekosustava.

Nginx

Iako Nginx zaostaje za Apacheom u tom pogledu, svakako daje sve od sebe da ga dostigne. Sve više i više pojedinaca odabire Nginx kako shvaćaju njegov puni potencijal. Podrška za platformu nastavlja rasti usporedo s njezinim organskim rastom kao korisnog web poslužitelja s brzom obradom.

Jedna od glavnih prepreka u podršci koju je Nginx morao prijeći bilo je pronalaženje dokumentacije na engleskom jeziku. To je zato što je većina Nginxa izvorno napisana na ruskom jeziku, uključujući i većinu njegove dokumentacije. Međutim, kako se poslužitelj širio i postajao sve poznatiji, mnoštvo resursa trećih strana sada je dostupno na univerzalnom jeziku.

Zajedničko rješenje?

Sada imate puno bolje razumijevanje ključnih komponenti i unutarnjeg rada Apachea i Nginxa. Iako se prilično razlikuju, neki korisnici iskorištavaju tu činjenicu kako bi dobili najbolje od oba svijeta. Tako je – moguće je koristiti Apache i Nginx zajedno.

Uobičajeno, korisnici teže koristiti Nginx kao reverzni proxy i postaviti ga ispred Apachea. To vam omogućuje da nadoknadite nedostatak brzine u Apacheovom rukovanju i obradi zahtjeva. Nginx prima i obrađuje sve zahtjeve dok je najbrži. Također vam omogućuje brzo istovremeno rješavanje velikog broja zahtjeva bez potrebe za ulaganjem puno resursa.

Još jedna značajka Nginxa koju korisnici iskorištavaju je njegova sposobnost učinkovitog rukovanja statičkim sadržajem. Kako bismo nadoknadili činjenicu da Nginx treba vanjsku komponentu za obradu dinamičkog sadržaja, možemo preusmjeriti PHP i druge relevantne zahtjeve na Apache putem proxyja. Apache će renderirati zahtjev u web stranicu i poslati ga natrag Nginxu kako bi ga on poslužio klijentu.

Evo nekoliko resursa koje možete pronaći na našem blogu koji vam mogu pomoći da započnete s oba web poslužitelja:

Apache
Nginx

Zaključak

Na kraju krajeva, i Apache i Nginx imaju svoje prednosti i mane. Ne postoje stroga pravila ili preporuke o tome koji biste poslužitelj trebali koristiti za svoj projekt. Vi ste najbolji sudac o tome što najbolje odgovara vašoj aplikaciji na temelju vaših jedinstvenih zahtjeva.

Morate otkriti aspekte i značajke oko kojih ne možete raditi kompromise i u skladu s tim odabrati. Ako je teško donijeti odluku, uvijek se možete okrenuti korištenju oba poslužitelja zajedno u prilagođenom rješenju.

Sretno računanje!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.