Inleiding tot web servers

Inleiding

Een webserver heeft als hoofdrol het serveren van webpagina’s voor een website. Een webpagina kan worden weergegeven uit een enkel HTML-bestand, of een complexe verzameling bronnen die samen passen. Als je je webapplicatie wilt hosten op het internet, heb je in veel gevallen een webserver nodig.

Een van de meest voorkomende gebruiksscenario’s voor webservers is het serveren van bestanden die nodig zijn voor het weergeven van een website in een browser. Wanneer je http://www.digitalocean.com bezoekt, begin je met het invoeren van een URL die een verzoek over het internet start. Dit verzoek gaat door meerdere lagen, waarbij één of meer van deze lagen een webserver is. Deze webserver genereert een reactie op je verzoek, wat in dit geval de website van DigitalOcean is, specifiek de homepage. Ideaal is dit snel en met 24/7 beschikbaarheid.

Hoewel elke bezoeker van de homepage van DigitalOcean dit als een enkele webpagina ervaart, zijn de meeste moderne webpagina’s vandaag de dag een combinatie van vele bronnen. Webservers fungeren als een tussenpersoon tussen de backend en de frontend, en serveren bronnen zoals HTML- en CSS-bestanden en JSON-gegevens, allemaal dynamisch op de fly gegenereerd of statisch geserveerd. Als je van plan bent om te werken met websites of online apps, is het uiterst nuttig om je te verdiepen in de basisprincipes van wat een webserver is en hoe het werkt.

De term “webserver” kan verwijzen naar zowel de software zelf als de hardware waarop deze aanwezig is, maar in dit artikel wordt specifiek naar webserversoftware verwezen. Voor meer details over deze verschillen, bekijk onze introductie tot cloud servers.

Algemene Gebruiksscenario’s

Een webserver verwerkt verzoeken op het internet via het HTTP- en HTTPS-protocol en wordt ook wel een HTTP-server genoemd. Een webserver onderscheidt zich van andere soorten servers doordat hij gespecialiseerd is in het verwerken van deze HTTP- en HTTPS-verzoeken, in tegenstelling tot applicatieservers (bijv. Gunicorn) en servers voor andere protocollen (d.w.z. WSGI). Deze andere servers fungeren als tussenschotten voor backend-programmeertalen via externe bibliotheken, wat een andere niveaus van abstractie is dan web servers.

Hier zijn enkele algemene taken die door web servers worden uitgevoerd:

  • Server HTML, CSS en JavaScript-bestanden.
  • Server afbeeldingen en video’s.
  • Verwerkt HTTP-foutmeldingen.
  • Verwerkt gebruikersverzoeken, vaak tegelijkertijd.
  • Reguleert URL-overeenkomst en herschrijving.
  • Verwerkt en serveert dynamisch content.
  • Comprimeert content voor geoptimaliseerde data-gebruik en snelheid.
  • Maakt browsercaching mogelijk voor je statische content.

In praktische termen zijn dit enkele persoonlijke projecten die een webserver vereisen:

  • Je wilt een website maken.
  • Je wilt een app maken die met het internet verbinding maakt.

Deze lijst is verre van uitputtend, en een webserver is niet strikt beperkt in de datatypen die deze aan een eindgebruiker kan serveren. Bijvoorbeeld, een webserver die web API-verzoeken afhandelt, reageert vaak met gegevens in een formaat zoals JSON.

Doelen van een Web Server

Web servers voldoen aan de verwachtingen van snelheid, beschikbaarheid, betrouwbaarheid en meer van hun publiek. Ze hebben een gedeeld doel om inhoud op het internet te serveren, en om een bruikbare webserveroplossing te zijn, moeten de volgende aspecten in overweging worden genomen:

  • Uptime: Dit verwijst naar de tijd dat een webserver online en operationeel is. Websites moeten altijd online zijn om gebruikers van dienst te zijn, dus een hoge uptime is het doel. Dit vertaalt zich ook in stabiliteit en voorspelbaarheid. Wanneer een gebruiker een URL intikt of op een link klikt naar je website, zou de verwachte pagina elk keer en op elk moment moeten laden. De enige uitzonderingen zouden geplande downimes voor updates of onderhoud moeten zijn. Een webserver die buggy is of.random crasht, beïnvloedt je gebruikerservaring negatief.
  • Snelheid: Uw webpagina’s moeten zo snel mogelijk laden. Gebruikers willen dat hun verzoek onmiddellijk wordt ingewilligd, anders riskeert u dat ze weggaan. Op een traag laden webpagina, zelfs als de gebruiker door de eerste laadtijd blijft zitten, zal elke volgende lange laadtijd exponentieel hun bereidheid verminderen om te blijven of opnieuw te bezoeken.
  • Concurrentie: Dit verwijst naar het afhandelen van meerdere verzoeken die tegelijkertijd binnenkomen. Te veel mensen proberen tegelijkertijd uw website te bezoeken, wat misschien een goed ding lijkt, maar dit wordt een echt probleem wanneer de laadtijden vertragen en uw hele server crashes. Uw fysieke of virtuele server heeft slechts een beperkte hoeveelheid middelen zoals RAM en CPU-rekenkracht, en web servers moeten deze middelen efficiënt gebruiken.
  • Scalabiliteit: Scalabiliteit verwijst naar het maken van uw bestaande servers krachtiger door verticale schaling, of het toevoegen van meer servers aan uw setup door horizontale schaling. Terwijl u uw publiek uitbreidt, bereikt u mogelijk een punt waarop u meer dan één of twee kleine web servers nodig hebt.
  • gemakkelijk instellen: Het snel opstarten van een project is de sleutel tot de iteratie van uw project. Een eenvoudige en herhaalbare installatieproces is belangrijk voor de eerste web server die u instelt, en de meerdere web servers daarna wanneer u schaalt op.
  • Documentatie: Web servers zijn complex. De meest courante setup zorgt ervoor dat u snel op de been bent, maar uw behoeften zullen na verloop van tijd groeien. Vaak heeft u functies nodig die niet zo vaak worden gebruikt. Wanneer die tijd komt, is goede documentatie essentieel voor het creëren van aangepaste oplossingen voor uw behoeften.
  • Ontwikkelaarssteun: Als de kernontwikkelaars niet gewijd zijn aan hun eigen project, zou je je project niet moeten wijden aan het hunne. Dit omvat zowel plannen voor langdurige ondersteuning voor hun software als directe korte termijnondersteuning die ze bieden in de vorm van bugfixes en patches.
  • Communitysteun: Hoewel een kernontwikkelingsteam verantwoordelijk is voor het meeste zware werk, draagt een bloeiende gemeenschap bij aan het opvullen van de gaten. Bij open source projecten kan dit betekenen dat er bijdragen worden geleverd aan de daadwerkelijke codebase, maar een sterke gemeenschap zal ook je vragen beantwoorden en je helpen met specifieke problemen.

Hoewel web servers verschillende oplossingen kunnen bieden, zijn deze oplossingen afgeleid van pogingen om deze zelfde problemen aan te pakken. Deze problemen evolueren zelf over de tijd samen met de behoeften en verwachtingen van de eindgebruiker, waardoor dit een levend en voortdurend veranderend lijstje is.

Een Web Server Oplossing Kiezen

De meest populaire open source web servers zijn momenteel Apache en Nginx.

Apache kwam eerst, en is gebouwd op een tijd toen het gebruikelijk was dat meerdere websites met hun eigen individuele configuratiebestanden op één enkele webserver stonden. Nginx kwam na Apache, op een tijd toen de behoeften verschooven van het serveren van meerdere websites vanaf één server naar het serveren van één website vanaf één server in een uiterst efficiënte manier onder belasting.

Waarborgen web servers delen dezelfde doelen en problemen, maar elke interpretatie en implementatie van een oplossing zal verschillen. De exacte antwoorden op deze problemen vormen het identiteit van elke gegeven web serveroplossing. Nginx en Apache worden hier gemond vanwege hun universeelheid, maar elke web serveroplossing zal subjectief zijn. Bij het kiezen van een web server is het belangrijk om rekening te houden met je eigen behoeften voor je specifieke project. Op die manier zal je methode van evaluatie, zelfs als de landschap van web serveraanbiedingen verandert, vastgelegd blijven door je eigen vereisten.

Hier zijn enkele belangrijke differentiatoren in hoe web servers proberen de doelen van een web server te bereiken:

Structuur van Configuratiebestanden

Web servers opslaan hun instellingen in configuratiebestanden. Je kunt je web servers aanpassen door deze bestanden te bewerken. De opslag en organisatie van configuratiebestanden is een subjectief, structureel probleem dat web serverproducten splitst.

De hoofdverdeling is tussen centralisatie en decentralisatie. Decentraliseerde configuratiebestanden maken een fijnmazige controle mogelijk op het bestandssysteemniveau, wat voortkomt uit het necessity om meerdere websites op één server te hosten. Centraliseerde configuraties richten zich niet op het hosten van meerdere websites op één server, maar richten zich erop om efficiënt een enkele website te bedienen. Deze configuraties vertrouwen op URI-patroonmatching, wat inhoudt dat URLs worden gekoppeld aan bestandsnamen en andere unieke identificatoren, in plaats van te vertrouwen op het matchen tegen de mapstructuur van een webserver.

Apache’s .htaccess-bestanden faciliteren een decentrale configuratie als een functie, en elke ontwerpkeuze gaat uit van dit focus op het bestandssysteem met een fijnmazige controle. Nginx heeft niet dezelfde focus op het bestandssysteem en richt zich op URI-patroonmatching en een centraliseerde configuratie.

Verwerking van Concurrency

De fysieke en virtuele servers waarop je web servers draait hebben beperkte middelen zoals RAM en CPU-verwerking. Hoe je webserver fundamenteel zijn verzoeken beheert, zal het grootste effect hebben op het efficiënt gebruiken van je middelen. Een enkel verzoek kan een hele proces per verzoek genereren, of het kan worden afgehandeld op basis van een gebeurtenisgestuurd mechanisme. De capaciteit van je webserver om meerdere gelijktijdige verzoeken efficiënt af te handelen, hangt vast aan fundamentele ontwerpkeuzes.

Apache verwerkt verzoeken door processen te spawnen, wat resources verbruikt op een snelheid die onder belasting een probleem kan worden. Nginx’s event-gedreven systeem gebruikt minder resources en kan onder belasting performanter zijn.

Serveren van Statische Inhoud

Naast webpagina’s krijgen web servers ook verzoeken voor andere bronnen zoals afbeeldingen, video’s, CSS-bestanden en JavaScript-bestanden. Aangezien deze items altijd hetzelfde zijn, ongeacht wie er om vraagt, wordt dit type inhoud aangeduid als statisch. Vaak is een webpagina zelf slechts een HTML-bestand dat niet is aangepast aan de persoon die er om vraagt, en wordt ook behandeld als statische inhoud. Web servers kunnen deze statische inhoud ook comprimeren voor betere laadtijden.

Nginx excelleert in het serveren van statische inhoud vanwege zijn event-gedreven verzoekverwerking. Apache kan ook statische inhoud serveren, maar in de meeste opstellingen niet met dezelfde snelheid en efficiëntie onder belasting als Nginx.

Serveren van Dynamische Inhoud

Wanneer inhoud wordt gewijzigd, verwerkt en aangepast afhankelijk van wie het verzoekt, wordt de inhoud dynamisch genoemd. Bijvoorbeeld, nadat je je aanmeldt op een website, zal de website vaak dynamisch je gebruikersnaam in de bovenste navigatiem balk weergeven. Dynamische inhoud voegt extra complexiteit toe omdat het de webserver dwingt veel unieke verzoeken op het moment van ontvangst af te handelen. Inhoud die is afgestemd op elk verzoek kan niet aan iedereen worden geserveerd en kan niet universeel in de cache worden opgeslagen.

De interne verwerking van dynamische inhoud verwijdert een extra laag van abstractie die normaal gesproken vereist dat het verzoek wordt doorgegeven aan een externe bibliotheek. Apache implementeert dynamische inhoudverwerking van nature, met populaire oplossingsstacks zoals LAMP (Linux, Apache, MySQL, PHP). Nginx is meer taalagnostisch maar vereist externe bibliotheken zoals PHP-FPM om als een vergelijkbare oplossing voor gebruiksscenario’s zoals de LAMP stack te fungeren.

Reverse Proxy Capability

Een reverse proxy staat voor een traditionele webserver en fungeert als een tussenserver die HTTP-verzoektrafiek routeert naar web servers achter zich. Een reverse proxy wordt de gateway die de verkeerstroom reguleert tussen web servers en het bredere internet en is vaak het laag dat direct met een firewall geïnterfaceerd. Hoewel de meeste web servers reverse proxy-capaciteiten hebben, is Nginx van de grond af opgebouwd en geoptimaliseerd om een robuuste reverse proxy-server te zijn.

De belangrijkheid van Nginx in de praktische toepassing hangt sterk af van zijn reverse proxy-functies en efficiëntie. Veel serverinstallaties plaatsen meerdere traditionele web servers achter een Nginx reverse proxy, die Nginx gebruikt om te bepalen naar welke webserver de aanvraag moet worden gestuurd op basis van belasting of regelconfiguratie. Deze tussenvoorraadrol maakt het mogelijk om in sommige opstellingen samen te werken met Apache, die als een reverse proxy voor een traditionele Apache-webserver staat.

Ondersteunings-ecosysteem

Nginx en Apache hebben beide sterke ondersteuning van hun respectieve ontwikkelings teams en gemeenschappen. Als de meest populaire open source web servers, zijn er veel leerbronnen beschikbaar. Apache wordt ondersteund door de Apache, een non-profitorganisatie, en is altijd gratis te gebruiken. De kern van Nginx is open source, maar gewenste functies zijn vastgelegd achter hun Nginx Plus-productaanbod met functies zoals upstream health checks, sessiepersistenticiteit en geavanceerde monitoring.

Alternatieven voor de Traditionele Webserver

Als je een server nodig hebt die altijd klaar staat om inkomende HTTP-verzoeken te beantwoorden, dan voldoet een webserver hier het beste aan. Naarmate je verder afzakt van het richten op het serveren van HTTP-verzoeken, worden web servers minder ideaal. Dit geldt vooral voor de aanvullende functies die web servers bieden. Bijvoorbeeld, functies zoals caching kunnen efficiënter worden afgehandeld op het niveau van de reverse proxy of CDN, afhankelijk van de setup.

Bovendien, aangezien ontwikkelaars hun prioriteiten hebben verschoven door ontwikkelingsbronnen te wijden aan het beheren van web servers, zijn oplossingen zoals serverloos, headless CMS en Jamstack ontstaan. Deze oplossingen vereisen geen zelfgehoste webserver, maar abstracteren de weblayer uit naar externe diensten. Voor ontwikkelaars die geen fijnmazige of geavanceerde controle nodig hebben over de webserverlaag, kan de ontwikkelingstijd elders worden gericht. Voor meer informatie, bekijk dit artikel over Jamstack met headless CMS of het implementeren van full stack Jamstack met DigitalOcean’s App Platform.

Conclusie

In dit artikel heb je een basisoverzicht gekregen van wat web servers zijn, hoe ze worden gebruikt en welke problemen ze proberen op te lossen. Bovenstaande kennis opdochterap je in de huidige landschapsweergave van web server oplossingen en je toepaste je kennis om de oplossing te vinden die specifiek bij jouw behoeften past. Om meer te leren over het instellen en gebruiken van een web server, bekijk de rest van onze Cloud Curriculum reeks over web servers.

Extra Hulpbronnen

Handleidingen:

  • Hoe Apache te installeren: Stap-voor-stap instructies voor het instellen van je eerste Apache server. Deze oplossing excelleert met gedecentraliseerde configuratie voor fijnstelling, en interne afhandeling van dynamische webpagina’s met koppelingen naar populaire programmeertalen zoals PHP.
  • Hoe Nginx te installeren: Stap-voor-stap instructies voor het instellen van je eerste Nginx server. Deze oplossing excelleert met gecentraliseerde configuratie, serveren van statische assets, fungeren als een reverse proxy en het afhandelen van hoge concurrency verkeer.
  • Apache vs Nginx: Praktische overwegingen: Een diepere verkenning van de twee belangrijkste spelers in het landschap van webserveroplossingen.

DigitalOcean Producten:

  • DigitalOcean Droplets: Virtuele private servers voor het testen en implementeren van webservers.
  • DigitalOcean Functions: Serverloze oplossing die een alternatief kan zijn voor virtuele private servers. Sla de serveronderhoud over en concentreer je op je applicatiecode.

Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction