Kodėl aš randu „Nginx“ praktiškai geriau nei „Apache“.


Remiantis naujausia „Netcraft“ žiniatinklio serverių apklausa, kuri buvo atlikta 2017 m. pabaigoje (tiksliai lapkritį), „Apache“ ir „Nginx“ yra plačiausiai naudojami atvirojo kodo žiniatinklio serveriai internete.

Apache yra nemokamas atvirojo kodo HTTP serveris, skirtas Unix tipo operacinėms sistemoms ir Windows. Jis buvo sukurtas kaip saugus, efektyvus ir išplečiamas serveris, teikiantis HTTP paslaugas sinchronizuodamas su vyraujančiais HTTP standartais.

Nuo pat paleidimo Apache buvo populiariausias žiniatinklio serveris internete nuo 1996 m. Tai de facto standartas žiniatinklio serveriams Linux ir atvirojo kodo ekosistemoje. Naujiems Linux vartotojams paprastai lengviau nustatyti ir naudoti.

Nginx (tariama Engine-x) yra nemokamas atvirojo kodo didelio našumo HTTP serveris, atvirkštinis tarpinis serveris ir IMAP/POP3 tarpinis serveris. Kaip ir „Apache“, ji taip pat veikia „Unix“ tipo operacinėse sistemose ir „Windows“.

Gerai žinomas dėl didelio našumo, stabilumo, paprastos konfigūracijos ir mažo resursų suvartojimo, bėgant metams jis tapo toks populiarus, o jo naudojimas internete žengia į aukštumas. Dabar tai yra žiniatinklio serveris, kurį pasirenka patyrę sistemos administratoriai arba geriausių svetainių žiniatinklio meistrai.

Kai kurios užimtos svetainės, kurias teikia:

  • Apache yra: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com ir daug daugiau.
  • Nginx yra: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud ir daugelis kitų.

Žiniatinklyje jau paskelbta daug išteklių, susijusių su Apache ir Nginx palyginimu (iš tikrųjų turiu omenyje straipsnius apie Apache vs Nginx), daugelis iš kurių aiškiai išsamiai paaiškinamos pagrindinės jų savybės ir operacijos pagal įvairius scenarijus, įskaitant našumo matavimus laboratorijos etalonuose. Todėl čia tai nebus nagrinėjama.

Tiesiog pasidalinsiu savo patirtimi ir mintimis apie visas diskusijas, išbandęs Apache ir Nginx, abi gamybinėse aplinkose, pagrįstose šiuolaikinių žiniatinklio programų prieglobos reikalavimais. skyrius.

Priežastys, kodėl aš manau, kad „Nginx“ yra praktiškai geresnė nei „Apache“.

Toliau pateikiamos priežastys, kodėl teikiant šiuolaikinį žiniatinklio turinį man labiau patinka „Nginx“ žiniatinklio serveris, o ne „Apache“.

1. Nginx yra lengvas

Nginx yra vienas iš lengviausių žiniatinklio serverių. Palyginti su „Apache“, kuri įdiegia daugybę funkcijų, reikalingų programai paleisti, sistemos plotas yra nedidelis.

Kadangi „Nginx“ sujungia keletą pagrindinių funkcijų, ji remiasi specialiais trečiųjų šalių žiniatinklio serveriais, tokiais kaip „Apache backend“, „FastCGI“, „Memcached“, SCGI ir uWSGI serveriai arba taikomųjų programų serveriai, t. ir kt.

Todėl jos atminties naudojimas yra daug geriau pritaikytas naudoti ribotus išteklius nei Apache.

2. Nginx sukurtas didelio lygiagretumui

Priešingai nei „Apache“ srieginė arba į procesą orientuota architektūra (procesas vienam ryšiui arba gijos vienam ryšiui modelis), Nginx naudoja keičiamo dydžio, įvykiais pagrįstą (asinchroninę) architektūrą. Jame naudojamas atsakingas proceso modelis, pritaikytas turimiems aparatinės įrangos ištekliams.

Jis turi pagrindinį procesą (kuris atlieka privilegijuotas operacijas, pvz., nuskaito konfigūraciją ir susiejimą su prievadais) ir sukuria kelis darbuotojo ir pagalbinio procesus.

Kiekvienas darbininkų procesas vienu metu gali apdoroti tūkstančius HTTP jungčių, skaityti ir įrašyti turinį į diską ir bendrauti su ankstesniais serveriais. Pagalbiniai procesai (talpyklos tvarkyklė ir talpyklos įkroviklis) gali valdyti turinio kaupimo talpykloje operacijas diske.

Dėl to jos operacijos yra keičiamos ir užtikrina aukštą našumą. Šis dizaino metodas dar labiau daro jį greitą ir palankų šiuolaikinėms programoms. Be to, norint išplėsti vietines Nginx funkcijas, galima naudoti trečiųjų šalių modulius.

3. Nginx lengva konfigūruoti

Nginx turi paprastą konfigūracijos failo struktūrą, todėl ją itin lengva konfigūruoti. Jį sudaro moduliai, valdomi konfigūracijos faile nurodytomis direktyvomis. Be to, direktyvos skirstomos į blokines ir paprastas direktyvas.

Blokų direktyva apibrėžiama skliaustais ({ ir }). Jei bloko direktyvoje skliaustuose gali būti kitų direktyvų, ji vadinama kontekstu, pvz., įvykiais, http, serveriu ir vieta.

http {
	server {
		
	}
}

Paprasta direktyva susideda iš pavadinimo ir parametrų, atskirtų tarpais ir baigiasi kabliataškiu (;).

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

		}
		
	}
}

Galite įtraukti pasirinktinius konfigūracijos failus naudodami, pavyzdžiui, įtraukimo direktyvą.

http {
	server {

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

Praktinis pavyzdys man buvo tai, kaip man pavyko lengvai sukonfigūruoti „Nginx“, kad būtų paleistos kelios svetainės su skirtingomis PHP versijomis, o tai buvo nedidelis iššūkis naudojant „Apache“.

4. Nginx yra puikus priekinės dalies tarpinis serveris

Vienas iš įprastų Nginx naudojimo būdų yra nustatyti jį kaip tarpinį serverį, šiuo atveju jis gauna HTTP užklausas iš klientų ir perduoda jas tarpiniams arba aukštesniems serveriams, kurie buvo paminėti aukščiau, naudodamas skirtingus protokolus. Taip pat galite keisti kliento užklausų antraštes, kurios siunčiamos į įgaliotąjį serverį, ir sukonfigūruoti atsakymų, gaunamų iš įgaliotųjų serverių, buferį.

Tada jis gauna atsakymus iš įgaliotųjų serverių ir perduoda juos klientams. Palyginti su „Apache“, lengviau konfigūruoti kaip tarpinį serverį, nes reikalingi moduliai daugeliu atvejų yra įjungti pagal numatytuosius nustatymus.

5. Nginx yra puikus statinio turinio pateikimas

Statinis turinys arba failai paprastai yra failai, saugomi serverio kompiuterio diske, pavyzdžiui, CSS failai , JavaScript failai arba vaizdai. Panagrinėkime scenarijų, kai naudojate „Nginx“ kaip „Nodejs“ (programų serverio) sąsają.

Nors „Nodejs“ serveryje (ypač „Node“ sistemose) yra įdiegtos statinio failų tvarkymo funkcijos, jiems nereikia intensyviai apdoroti, kad būtų pateiktas nedinaminis turinys, todėl praktiškai naudinga sukonfigūruoti žiniatinklio serverį, kad statinis turinys būtų aptarnaujamas tiesiogiai klientų.

Nginx gali atlikti daug geresnį darbą tvarkydamas statinius failus iš konkretaus katalogo ir gali užkirsti kelią statinių išteklių užklausoms užgniaužti serverio procesus. Tai žymiai pagerina bendrą galinių serverių našumą.

6. Nginx yra efektyvus apkrovos balansavimo įrankis

Norint pasiekti aukštą šiuolaikinių žiniatinklio programų našumą ir veikimo laiką, gali prireikti paleisti kelis programos egzempliorius viename arba paskirstytuose HTTP serveriuose. Tam, kad būtų galima paskirstyti apkrovą tarp HTTP serverių, gali prireikti nustatyti apkrovos balansavimą.

Šiandien apkrovos balansavimas tapo plačiai naudojamu metodu, skirtu optimizuoti operacinės sistemos išteklių panaudojimą, maksimaliai padidinti lankstumą, sumažinti delsą, padidinti pralaidumą, pasiekti dubliavimą ir nustatyti gedimams atsparias konfigūracijas keliose programose.

Nginx naudoja šiuos apkrovos balansavimo metodus:

  • apvalus patikrinimas (numatytasis metodas) – užklausos prieš srovę nukreiptiems serveriams paskirstomos apvaliai (pagal serverių sąrašą aukštesnio srauto telkinyje).
  • mažiausiai prisijungęs – čia kita užklausa perduodama serveriui, turinčiam mažiausiai aktyvių ryšių.
  • ip-hash – čia maišos funkcija naudojama norint nustatyti, kuris serveris turi būti pasirinktas kitai užklausai (pagal kliento IP adresą).
  • Bendra maiša – pagal šį metodą sistemos administratorius nurodo maišą (arba raktą) su nurodytu tekstu, užklausos ar vykdymo laiko kintamaisiais arba jų deriniu. Pavyzdžiui, raktas gali būti šaltinio IP ir prievadas arba URI. Tada „Nginx“ paskirsto apkrovą tarp ankstesnių serverių, sugeneruodama dabartinės užklausos maišą ir padėdamas ją prieš srovę esančius serverius.
  • Mažiausias laikas („Nginx Plus“) – kita užklausa priskiriama ankstesniam serveriui su mažiausiu dabartinių ryšių skaičiumi, tačiau pirmenybė teikiama serveriams, kurių vidutinis atsako laikas yra mažiausias.

7. Nginx yra labai keičiamas

Be to, Nginx yra labai keičiamo dydžio, o modernios žiniatinklio programos, ypač įmonės, reikalauja technologijos, užtikrinančios didelį našumą ir mastelį.

Viena įmonė, kuri naudojasi nuostabiomis „Nginx“ mastelio funkcijomis, yra CloudFlare. Anot Matthew Prince, ji sugebėjo išplėsti savo žiniatinklio programas ir apdoroti daugiau nei 15 mlrd. puslapių peržiūrų per mėnesį, turėdama palyginti kuklią infrastruktūrą., CloudFare įkūrėjas ir generalinis direktorius.

Norėdami gauti išsamesnį paaiškinimą, peržiūrėkite šį straipsnį Nginx tinklaraštyje: NGINX vs. Apache: Our View of a Decade-Old Question.

Išvada

Apache ir Nginx negali būti pakeisti vienas kitu, jie turi savo stipriąsias ir silpnąsias puses. Tačiau Nginx siūlo galingą, lanksčią, keičiamo dydžio ir saugią technologiją, leidžiančią patikimai ir efektyviai maitinti šiuolaikines svetaines ir žiniatinklio programas. Koks tavo požiūris? Praneškite mums naudodami toliau pateiktą atsiliepimų formą.