Hvorfor jeg finner Nginx praktisk talt bedre enn Apache


I følge den siste nettserverundersøkelsen til Netcraft, som ble utført mot slutten av 2017, (nøyaktig i november), er Apache og Nginx de mest brukte åpen kildekode-nettserverne på Internett.

Apache er en gratis HTTP-server med åpen kildekode for Unix-lignende operativsystemer og Windows. Den ble designet for å være en sikker, effektiv og utvidbar server som tilbyr HTTP-tjenester synkronisert med de gjeldende HTTP-standardene.

Helt siden lanseringen har Apache vært den mest populære webserveren på Internett siden 1996. Det er de facto-standarden for webservere i Linux og åpen kildekode-økosystemet. Nye Linux-brukere finner det normalt enklere å sette opp og bruke.

Nginx (uttales 'Engine-x') er en gratis, åpen kildekode, høyytelses HTTP-server, omvendt proxy og en IMAP/POP3-proxy-server. Akkurat som Apache, kjører den også på Unix-lignende operativsystemer og Windows.

Velkjent for sin høye ytelse, stabilitet, enkle konfigurasjon og lave ressursforbruk, har den i løpet av årene blitt så populær og bruken på Internett er på vei mot større høyder. Det er nå den foretrukne webserveren blant erfarne systemadministratorer eller nettmestere for toppsider.

Noen av de travle nettstedene drevet av:

  • Apache er: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com pluss mye mer.
  • Nginx er: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud og mange andre.

Det er allerede publisert mange ressurser på nettet om sammenligningen mellom Apache og Nginx (jeg mener egentlig 'Apache Vs Nginx'-artikler), hvorav mange tydelig forklarer i detalj, deres toppfunksjoner og operasjoner under forskjellige scenarier, inkludert ytelsesmål i laboratoriestandarder . Derfor vil det ikke bli tatt opp her.

Jeg vil ganske enkelt dele mine erfaringer og tanker om hele debatten, etter å ha prøvd ut Apache og Nginx, begge i produksjonsmiljøer basert på krav til hosting av moderne webapplikasjoner, i neste avsnitt.

Grunner til at jeg finner Nginx praktisk talt bedre enn Apache

Følgende er grunner til at jeg foretrekker Nginx webserver fremfor Apache for levering av moderne nettinnhold:

Nginx er en av lette webservere der ute. Den har små fotavtrykk på et system sammenlignet med Apache som implementerer et stort omfang av funksjonalitet som er nødvendig for å kjøre en applikasjon.

Fordi Nginx setter sammen en håndfull kjernefunksjoner, er den avhengig av dedikerte tredjeparts oppstrøms webservere som en Apache backend, FastCGI, Memcached, SCGI og uWSGI servere eller applikasjonsservere, dvs. språkspesifikke servere som Node.js, Tomcat , etc.

Derfor er minnebruken langt bedre egnet for begrensede ressursdistribusjoner enn Apache.

I motsetning til Apaches gjenge- eller prosessorienterte arkitektur (prosess-per-tilkobling eller tråd-per-tilkobling-modell), bruker Nginx en skalerbar, hendelsesdrevet (asynkron) arkitektur. Den bruker en ansvarlig prosessmodell som er skreddersydd for de tilgjengelige maskinvareressursene.

Den har en masterprosess (som utfører de privilegerte operasjonene som lesing av konfigurasjon og binding til porter) og som oppretter flere arbeider- og hjelpeprosesser.

Arbeidsprosessene kan hver håndtere tusenvis av HTTP-tilkoblinger samtidig, lese og skrive innhold til disk og kommunisere med oppstrømsservere. Hjelpeprosessene (bufferbehandling og hurtigbufferlaster) kan administrere bufringsoperasjoner for innhold på disk.

Dette gjør driften skalerbar og resulterer i høy ytelse. Denne designtilnærmingen gjør den raskere, gunstig for moderne bruksområder. I tillegg kan tredjepartsmoduler brukes til å utvide de opprinnelige funksjonalitetene i Nginx.

Nginx har en enkel konfigurasjonsfilstruktur, noe som gjør den superenkel å konfigurere. Den består av moduler som styres av direktiver spesifisert i konfigurasjonsfilen. I tillegg er direktiver delt inn i blokkdirektiver og enkle direktiver.

Et blokkdirektiv er definert av klammeparenteser ({ og }). Hvis et blokkdirektiv kan ha andre direktiver innenfor klammeparenteser, kalles det en kontekst som hendelser, http, server og plassering.

http {
	server {
		
	}
}

Et enkelt direktiv består av navnet og parameterne atskilt med mellomrom og ender med semikolon (;).

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

		}
		
	}
}

Du kan inkludere tilpassede konfigurasjonsfiler ved å bruke include-direktivet, for eksempel.

http {
	server {

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

Et praktisk eksempel for meg var hvordan jeg klarte å enkelt konfigurere Nginx til å kjøre flere nettsteder med forskjellige PHP-versjoner, noe som var litt av en utfordring med Apache.

En av de vanlige bruksområdene til Nginx er å sette den opp som en proxy-server, i dette tilfellet mottar den HTTP-forespørsler fra klienter og sender dem til proxy- eller oppstrømsservere som ble nevnt ovenfor, over forskjellige protokoller. Du kan også endre klientforespørselhoder som sendes til proxy-serveren, og konfigurere bufring av svar som kommer fra proxy-servere.

Deretter mottar den svar fra proxy-servere og sender dem til klienter. Det er mye lettere å konfigurere som en proxy-server sammenlignet med Apache siden de nødvendige modulene i de fleste tilfeller er aktivert som standard.

Statisk innhold eller filer er vanligvis filer som er lagret på disken på serverdatamaskinen, for eksempel CSS-filer, JavaScript-filer eller bilder. La oss vurdere et scenario der du bruker Nginx som en frontend for Nodejs (applikasjonsserveren).

Selv om Nodejs server (spesielt Node-rammeverk) har innebygde funksjoner for statisk filhåndtering, trenger de ikke å gjøre noe intensiv prosessering for å levere ikke-dynamisk innhold, derfor er det praktisk talt fordelaktig å konfigurere webserveren til å vise statisk innhold direkte til klienter.

Nginx kan utføre en mye bedre jobb med å håndtere statiske filer fra en spesifikk katalog, og kan forhindre at forespørsler om statiske eiendeler struper oppstrøms serverprosesser. Dette forbedrer den generelle ytelsen til backend-servere betydelig.

For å realisere høy ytelse og oppetid for moderne webapplikasjoner kan det kreve å kjøre flere applikasjonsforekomster på en enkelt eller distribuert HTTP-server. Dette kan igjen gjøre det nødvendig å sette opp lastbalansering for å fordele lasten mellom HTTP-serverne dine.

I dag har lastbalansering blitt en mye brukt tilnærming for å optimalisere ressursutnyttelsen av operativsystemet, maksimere fleksibiliteten, kutte ned latens, øke gjennomstrømningen, oppnå redundans og etablere feiltolerante konfigurasjoner – på tvers av flere applikasjonsforekomster.

Nginx bruker følgende lastbalanseringsmetoder:

  • round-robin (standardmetode) – forespørsler til oppstrømstjenerne distribueres på en round-robin-måte (i rekkefølgen etter listen over servere i oppstrømspoolen).
  • minst tilkoblet – her sendes neste forespørsel til serveren med minst antall aktive tilkoblinger.
  • ip-hash – her brukes en hash-funksjon for å bestemme hvilken server som skal velges for neste forespørsel (basert på klientens IP-adresse).
  • Generisk hash – under denne metoden spesifiserer systemadministratoren en hash (eller nøkkel) med den gitte teksten, variabler for forespørselen eller kjøretiden, eller deres kombinasjon. Nøkkelen kan for eksempel være en kilde-IP og port, eller URI. Nginx fordeler deretter belastningen mellom oppstrømstjenerne ved å generere en hash for gjeldende forespørsel og plassere den mot oppstrømstjenerne.
  • Minste tid (Nginx Plus) – tildeler den neste forespørselen til oppstrømsserveren med det minste antallet gjeldende tilkoblinger, men favoriserer serverne med lavest gjennomsnittlig responstid.

Videre er Nginx svært skalerbar og moderne webapplikasjoner, spesielt bedriftsapplikasjoner krever teknologi som gir høy ytelse og skalerbarhet.

Et selskap som drar nytte av Nginx sine fantastiske skalerbarhetsfunksjoner er CloudFlare, det har klart å skalere nettapplikasjonene sine til å håndtere mer enn 15 milliarder månedlige sidevisninger med en relativt beskjeden infrastruktur, ifølge Matthew Prince, medgründer og administrerende direktør i CloudFare.

For en mer omfattende forklaring, sjekk ut denne artikkelen på Nginx-bloggen: NGINX vs. Apache: Our View of a Decade-Old Question.

Både Apache og Nginx kan ikke erstattes av hverandre, de har sine sterke og svake sider. Nginx tilbyr imidlertid en kraftig, fleksibel, skalerbar og sikker teknologi for pålitelig og effektiv drift av moderne nettsteder og nettapplikasjoner. Hva er din mening? Gi oss beskjed via tilbakemeldingsskjemaet nedenfor.