Optimaliseer webcapaciteit met nginx


Optimaliseer webcapaciteit met nginx

8 July 2011 Gepubliceerd op door in Blog

Het optimaliseren van de performance van uw web- of applicatieserver kunt u op verschillende manieren aanpakken. De uiteindelijke performance van uw website of applicatie is een combinatie van verschillende factoren, zoals optimalisatie van de frontend, caching, database (structuur en queries), de configuratie van de webserver en het versnellen van de applicatie zelf.

nginx-logo

Wij besteedden eerder al een blogartikel aan tips om binnen een bestaande configuratie verbeteringen door te voeren, maar u kunt ook besluiten om wellicht een geheel nieuwe webserverconfiguratie te gaan gebruiken voor uw websites en applicaties. U zou bijvoorbeeld kunnen kijken naar het steeds populairder wordende nginx als vervanging voor of aanvulling op uw bestaande webserver.

Wat is nginx?

Nginx is een gecombineerde webserver en reverse proxy, hetgeen betekent dat het zowel zelfstandig kan worden ingezet, alsmede in combinatie met een andere webserver. In beide rollen zorgt nginx voor snelheidswinst, ofwel voor de achterliggende web- of applicatieserver, ofwel door deze zelf direct te verwerken. Verschillende grote websites, zoals SourceForge en WordPress, maken gebruik van nginx. Het is (na Apache en Microsoft’s IIS) inmiddels de op drie na meest gebruikte webserver op het internet.

De kracht van nginx komt voort uit het feit dat het gebouwd is met een duidelijk doel voor ogen: hoge performance. Om dit doel te realiseren is nginx ontdaan van iedere vorm van overbodige franje en ontworpen om zo snel mogelijk veel requests te kunnen verwerken, zonder hoge belasting van de serveromgeving. Dit doel wordt onder andere bereikt doordat nginx alleen statische content verwerkt (zoals CSS, Javascript, afbeeldingen en PDFs). Voor het verwerken van dynamische content, zoals PHP, maakt nginx gebruik van externe processen zoals FastCGI (een protocol voor het aanroepen van externe applicaties) en het steeds populairder wordende PHP-FPM (een alternatieve FastCGI implementatie voor PHP).

De architectuur van nginx

De logica achter deze opzet is het feit dat meestal het grootste deel van de requests die een webserver wordt gevraagd te verwerken er geen enkele noodzaak is om alle modules van de webserver te laden. Bij Apache bijvoorbeeld bestaat een enkel webserver proces meestal uit vele megabytes aan modules die geheel overbodig zijn als er afbeeldingen, binaire bestanden, of statische tekst worden opgevraagd. De server gebruikt onnodig veel geheugen en het CPU-gebruik schiet omhoog bij ieder nieuw proces. Nginx gebruikt weinig geheugen en roept externe modules alleen aan indien deze daadwerkelijk nodig zijn.

Nginx is een zogenaamde asynchrone service: het nginx master proces start een aantal worker processen op om de requests te behandelen, in plaats van dat er voor ieder request een nieuwe thread wordt gestart om het af te handelen. Op deze manier wordt het geheugengebruik verkleind en als gevolg daarvan de load op de server beperkt. Het maakt de webserver ook minder gevoelig voor connection-gebaseerde denial of service aanvallen (zoals slowloris).

Door het hoge geheugengebruik als gevolg van de vele modules stellen webservers als Apache en IIS zware eisen op het gebied van geheugen en CPU belasting. Bij succesvolle websites is het daardoor noodzakelijk om een server te gebruiken die speciaal daarvoor is uitgerust. Nginx gaat voorzichtiger om met deze resources en kan met veel minder toe. Voor een intensief gebruikte website hoeft daarom u niet te investeren in dure apparatuur of Cloud servers met hoge maandelijkse lasten. Het gebruik van nginx zorgt daarmee niet alleen voor hoge performance en daarmee verbeterde gebruikservaring, maar ook voor besparing op uw hostingkosten.

nginx_architecture
architectuur van nginx

Beperkingen van nginx

Natuurlijk zijn er ook redenen om nginx niet te gebruiken, of alleen in combinatie met andere (webserver) software. Een aantal afwegingen:

  • Bij hoofdzakelijk dynamische requests kan de hoge performance van nginx teniet worden gedaan door de noodzaak tot veel externe aanroepen. Dit kan zelfs resulteren in een lagere snelheid dan bij een alles-in-één webserver. De langzaamste schakel in de keten bepaalt tenslotte de uiteindelijke snelheid.
  • Specifieke configuraties en regels voor websites, zoals bijvoorbeeld in Apache via .htaccess bestanden in te stellen, kunnen bij nginx alleen centraal ingesteld worden en vereisen het herladen van de webserver bij iedere wijziging. Dit is in veel gevallen erg onpraktisch bij bijvoorbeeld shared hosting omgevingen.
  • Nginx heeft geen directe ondersteuning voor het uitvoeren van scripts onder de rechten van de eigenaar ervan. Voor het veilig onderling afscheiden van websites dienen er voor iedere site aparte instanties te worden opgestart van de applicatieserver (zoals bijvoorbeeld PHP-FPM).
  • Voor bestaande webservers met veel verschillende websites is het veelal een complexe operatie om de bestaande configuratie om te zetten naar een nginx configuratie waarbij de correcte werking van alle websites gewaarborgd blijft. Als er echte noodzaak toe is, kan het de moeite waard zijn, maar anders is het vaak verstandiger om de situatie te laten zoals hij is.

Als u op zoek bent naar een manier om de performance van uw website of applicatie te verbeteren, zorg er dan voor dat u goed onderzoekt waar de bottleneck precies zit. Het vervangen van uw webserver door nginx heeft weinig zin als de traagheid niet wordt veroorzaakt door de webserver zelf, maar dus andere onderdelen zoals de applicatie zelf, de database of het ontbreken van een caching mechanisme.

Haal het meeste uit nginx

Door de hoge verwerkingssnelheid van nginx is er bijna geen reden te bedenken om nginx niet als reverse proxyserver te gebruiken. De afweging er hoogstens nog om de oude webserver geheel te vervangen door nginx en een relevante applicatieserver of om nginx alleen voor de bestaande webserver te zetten. Onderstaande vergelijking schetst enkele mogelijke afwegingen.

nginx_standalone

Standalone (met applicatieserver)

  • Veel statische content
  • Dedicated serveromgevingen
  • Nieuwe omgevingen
nginx_proxy

Reverse proxy en/of loadbalancer

  • Hoofdzakelijk dynamische content
  • Shared hosting omgevingen
  • Performance optimalisatie bestaande servers

Meer weten?

Bij Cyso wordt er in toenemende mate gebruik gebruikt van nginx bij het implementeren van platformen voor onze klanten. Wilt u weten in welke vorm nginx in uw platform eventueel het best geïmplementeerd kan worden? Neem dan contact op met één van onze verkoopmedewerkers.

Share 

Recent