Zoeken op website

Waarom ik Nginx praktisch beter vind dan Apache


Volgens het laatste webserveronderzoek van Netcraft, dat eind 2017 (precies in november) werd uitgevoerd, zijn Apache en Nginx de meest gebruikte open source-webservers op internet.

Apache is een gratis, open-source HTTP-server voor Unix-achtige besturingssystemen en Windows. Het is ontworpen als een veilige, efficiënte en uitbreidbare server die HTTP-services levert die synchroon lopen met de heersende HTTP-standaarden.

Sinds de lancering is Apache sinds 1996 de populairste webserver op internet. Het is de de facto standaard voor webservers in het Linux- en open source-ecosysteem. Nieuwe Linux-gebruikers vinden het normaal gesproken gemakkelijker in te stellen en te gebruiken.

Nginx (uitgesproken als ‘Engine-x’) is een gratis, open-source, krachtige HTTP-server, reverse proxy en een IMAP/POP3-proxyserver. Net als Apache draait het ook op Unix-achtige besturingssystemen en Windows.

Bekend om zijn hoge prestaties, stabiliteit, eenvoudige configuratie en laag verbruik van hulpbronnen, is het door de jaren heen zo populair geworden en is het gebruik ervan op internet op weg naar grotere hoogten. Het is nu de webserver bij uitstek onder ervaren systeembeheerders of webmasters van topsites.

Enkele van de drukbezochte sites, mogelijk gemaakt door:

  • Apache zijn: PayPal, BBC.com, BBC.co.uk, SSLLABS.com, Apple.com en nog veel meer.
  • Nginx zijn: Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud en vele anderen.

Er zijn al talloze bronnen op internet gepubliceerd over de vergelijking tussen Apache en Nginx (ik bedoel eigenlijk 'Apache Vs Nginx'-artikelen), veel waarvan duidelijk in detail hun belangrijkste kenmerken en werkingen worden uitgelegd onder verschillende scenario's, inclusief prestatiemaatstaven in laboratoriumbenchmarks. Daarom zal dat hier niet worden behandeld.

Ik zal eenvoudigweg mijn ervaringen en gedachten delen over het hele debat, nadat ik Apache en Nginx heb uitgeprobeerd, beide in productieomgevingen gebaseerd op vereisten voor het hosten van moderne webapplicaties, in de volgende sectie.

Redenen waarom ik Nginx praktisch beter vind dan Apache

Hieronder volgen redenen waarom ik de Nginx-webserver verkies boven Apache voor de levering van moderne webinhoud:

1. Nginx is lichtgewicht

Nginx is een van de lichtgewicht webservers die er zijn. Het heeft een kleine voetafdruk op een systeem vergeleken met Apache, dat een groot aantal functionaliteiten implementeert die nodig zijn om een applicatie uit te voeren.

Omdat Nginx een handvol kernfuncties combineert, is het afhankelijk van speciale upstream-webservers van derden, zoals een Apache-backend, FastCGI, Memcached, SCGI en uWSGI-servers of applicatieserver, d.w.z. taalspecifieke servers zoals Node.js, Tomcat , enz.

Daarom is het geheugengebruik veel beter geschikt voor implementaties met beperkte bronnen dan Apache.

2. Nginx is ontworpen voor hoge gelijktijdigheid

In tegenstelling tot de threaded- of procesgeoriënteerde architectuur van Apache (process-per-connection of thread-per-connection-model), gebruikt Nginx een schaalbare, gebeurtenisgestuurde (asynchrone) architectuur. Er wordt gebruik gemaakt van een aansprakelijk procesmodel dat is afgestemd op de beschikbare hardwarebronnen.

Het heeft een hoofdproces (dat de geprivilegieerde bewerkingen uitvoert, zoals het lezen van configuraties en het binden aan poorten) en dat verschillende werk- en helperprocessen creëert.

De werkprocessen kunnen elk duizenden HTTP-verbindingen tegelijkertijd verwerken, inhoud naar schijf lezen en schrijven, en communiceren met upstream-servers. De helperprocessen (cachemanager en cachelader) kunnen cachingbewerkingen op de schijf beheren.

Dit maakt de activiteiten schaalbaar en resulteert in hoge prestaties. Deze ontwerpbenadering maakt het verder snel en gunstig voor moderne toepassingen. Bovendien kunnen modules van derden worden gebruikt om de native functionaliteiten in Nginx uit te breiden.

3. Nginx is eenvoudig te configureren

Nginx heeft een eenvoudige configuratiebestandsstructuur, waardoor het super eenvoudig te configureren is. Het bestaat uit modules die worden bestuurd door richtlijnen die zijn gespecificeerd in het configuratiebestand. Bovendien zijn richtlijnen onderverdeeld in blokrichtlijnen en eenvoudige richtlijnen.

Een blokrichtlijn wordt gedefinieerd door accolades ({ en }). Als een blokrichtlijn andere richtlijnen tussen accolades kan hebben, wordt dit een context genoemd, zoals gebeurtenissen, http, server en locatie.

http {
	server {
		
	}
}

Een eenvoudige richtlijn bestaat uit de naam en parameters, gescheiden door spaties en eindigt met een puntkomma (;).

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

		}
		
	}
}

U kunt aangepaste configuratiebestanden opnemen met behulp van bijvoorbeeld de include-instructie.

http {
	server {

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

Een praktisch voorbeeld voor mij was hoe ik Nginx eenvoudig kon configureren om meerdere websites met verschillende PHP-versies te draaien, wat een kleine uitdaging was met Apache.

4. Nginx is een uitstekende frontend-proxy

Een van de meest voorkomende toepassingen van Nginx is het instellen als proxyserver. In dit geval ontvangt het HTTP-verzoeken van clients en geeft deze door aan proxy- of upstream-servers die hierboven zijn genoemd, via verschillende protocollen. U kunt ook de headers van clientverzoeken wijzigen die naar de proxyserver worden verzonden, en de buffering configureren van antwoorden die afkomstig zijn van de proxyservers.

Vervolgens ontvangt het antwoorden van de proxyservers en geeft deze door aan clients. Het is veel eenvoudiger om als proxyserver te configureren in vergelijking met Apache, omdat de vereiste modules in de meeste gevallen standaard zijn ingeschakeld.

5. Nginx is opmerkelijk voor het aanbieden van statische inhoud

Statische inhoud of bestanden zijn doorgaans bestanden die op schijf op de servercomputer zijn opgeslagen, bijvoorbeeld CSS-bestanden, JavaScript-bestanden of afbeeldingen. Laten we een scenario overwegen waarin u Nginx gebruikt als frontend voor Nodejs (de applicatieserver).

Hoewel de Nodejs-server (met name Node-frameworks) ingebouwde functies heeft voor het verwerken van statische bestanden, hoeven ze geen intensieve verwerking uit te voeren om niet-dynamische inhoud te leveren. Daarom is het praktisch voordelig om de webserver te configureren om statische inhoud rechtstreeks aan te leveren klanten.

Nginx kan veel beter omgaan met statische bestanden uit een specifieke directory, en kan voorkomen dat verzoeken om statische assets upstream serverprocessen verstikken. Dit verbetert de algehele prestaties van backend-servers aanzienlijk.

6. Nginx is een efficiënte load balancer

Om hoge prestaties en uptime voor moderne webapplicaties te realiseren, kan het nodig zijn om meerdere applicatie-instances op één of gedistribueerde HTTP-servers uit te voeren. Dit kan op zijn beurt noodzakelijk zijn voor het instellen van taakverdeling om de belasting tussen uw HTTP-servers te verdelen.

Tegenwoordig is taakverdeling een veelgebruikte aanpak geworden voor het optimaliseren van het gebruik van besturingssysteembronnen, het maximaliseren van de flexibiliteit, het terugdringen van de latentie, het verhogen van de doorvoer, het bereiken van redundantie en het opzetten van fouttolerante configuraties – voor meerdere applicatie-instances.

Nginx gebruikt de volgende methoden voor taakverdeling:

  • round-robin (standaardmethode): verzoeken aan de upstream-servers worden op round-robin-wijze gedistribueerd (in volgorde van de lijst met servers in de upstream-pool).
  • minst verbonden – hier wordt het volgende verzoek via een proxy verzonden naar de server met het minste aantal actieve verbindingen.
  • ip-hash – hier wordt een hash-functie gebruikt om te bepalen welke server moet worden geselecteerd voor het volgende verzoek (op basis van het IP-adres van de client).
  • Generieke hash – bij deze methode specificeert de systeembeheerder een hash (of sleutel) met de gegeven tekst, variabelen van het verzoek of de runtime, of hun combinatie. De sleutel kan bijvoorbeeld een bron-IP en -poort of URI zijn. Nginx verdeelt vervolgens de belasting over de upstream-servers door een hash voor het huidige verzoek te genereren en deze tegen de upstream-servers te plaatsen.
  • Minste tijd (Nginx Plus) – wijst het volgende verzoek toe aan de upstream-server met het minste aantal huidige verbindingen, maar geeft de voorkeur aan de servers met de laagste gemiddelde reactietijden.

7. Nginx is zeer schaalbaar

Bovendien is Nginx zeer schaalbaar en moderne webapplicaties, vooral bedrijfsapplicaties, vragen om technologie die hoge prestaties en schaalbaarheid biedt.

Eén bedrijf dat profiteert van de verbazingwekkende schaalbaarheidsfuncties van Nginx is CloudFlare. Het is erin geslaagd zijn webapplicaties te schalen om meer dan 15 miljard maandelijkse pageviews te verwerken met een relatief bescheiden infrastructuur, volgens Matthew Prince, mede-oprichter en CEO van CloudFare.

Voor een uitgebreidere uitleg kun je dit artikel op de Nginx-blog lezen: NGINX vs. Apache: Our View of a Decade-Old Question.

Conclusie

Zowel Apache als Nginx kunnen niet door elkaar worden vervangen, ze hebben hun sterke en zwakke punten. Nginx biedt echter een krachtige, flexibele, schaalbare en veilige technologie voor het betrouwbaar en efficiënt aandrijven van moderne websites en webapplicaties. Wat is jouw mening? Laat het ons weten via onderstaand feedbackformulier.