Introductie tot webservers

Introductie

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

Een van de meest voorkomende toepassingen voor webservers is het leveren van bestanden die nodig zijn om een website weer te geven in een browser. Wanneer je naar http://www.digitalocean.com gaat, begin je met het invoeren van een URL die een verzoek start over het internet. Dit verzoek passeert meerdere lagen, waarvan ten minste één een webserver zal zijn. Deze webserver genereert een reactie op jouw verzoek, die in dit geval de DigitalOcean-website is, specifiek de startpagina. Idealiter gebeurt dit snel en met 24/7 beschikbaarheid.

Hoewel elke bezoeker van de startpagina van DigitalOcean deze ervaart als een enkele webpagina, zijn de meeste moderne webpagina’s vandaag de dag in werkelijkheid een combinatie van veel middelen. Webservers fungeren als een tussenpersoon tussen de backend en de frontend, waarbij middelen zoals HTML- en CSS-bestanden tot JSON-gegevens worden geserveerd, allemaal dynamisch gegenereerd on-the-fly of statisch geserveerd. Als je van plan bent om op enigerlei wijze met websites of online apps te werken, is het uiterst nuttig om je vertrouwd te maken met de basisprincipes van wat een webserver is en hoe het werkt.

Hoewel de term “webserver” kan verwijzen naar zowel de software zelf als de hardware waarop het bestaat, verwijst dit artikel specifiek naar webserver software. Voor meer details over dit verschil, bekijk onze introductie tot cloud servers.

Veelvoorkomende Gebruiksscenario’s

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

Hier zijn enkele veelvoorkomende taken die worden afgehandeld door web servers:

  • Dient HTML-, CSS- en JavaScript-bestanden.
  • Dient afbeeldingen en video’s.
  • Handelt HTTP-foutmeldingen af.
  • Handelt gebruikersverzoeken af, vaak gelijktijdig.
  • Stuurt URL-matching en herschrijving aan.
  • Verwerkt en dient dynamische inhoud op.
  • Comprimeert inhoud voor geoptimaliseerd datagebruik en snelheid.
  • Maakt browsercaching mogelijk voor uw statische inhoud.

In praktische termen zijn hier enkele persoonlijke projecten die een webserver zouden omvatten:

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

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

Doelen van een Webserver

Web servers bedienen een publiek met verwachtingen van snelheid, beschikbaarheid, betrouwbaarheid en meer. Ze hebben een gedeeld doel om inhoud op het internet te serveren, en om als een levensvatbare webserveroplossing te worden beschouwd, moeten de volgende aspecten worden overwogen:

  • Uptime: Dit verwijst naar de tijd dat een webserver online en operationeel is. Websites moeten te allen tijde online zijn om gebruikers van dienst te zijn, dus een hoge uptime is het doel. Dit vertaalt zich ook naar stabiliteit en voorspelbaarheid. Wanneer een gebruiker een URL invoert of op een link naar uw website klikt, moet de verwachte pagina elke keer en op elk moment worden geladen. De enige uitzonderingen zouden geplande downtimes voor updates of onderhoud moeten zijn. Een webserver die buggy is of willekeurig crasht, heeft een nadelige invloed op de ervaring van uw gebruikers.
  • Snelheid: Uw webpagina’s moeten zo snel mogelijk laden. Gebruikers willen dat hun verzoek onmiddellijk wordt ingewilligd, anders loop je het risico ze te verliezen. Op een langzaam ladende webpagina zal zelfs als de gebruiker de eerste lading doorstaat, elke volgende lange lading hun bereidheid om te blijven of opnieuw te bezoeken exponentieel verminderen.
  • Gelijkheid: Dit verwijst naar de verwerking van meerdere verzoeken die tegelijkertijd binnenkomen. Het lijkt misschien een goede zaak om te veel mensen tegelijkertijd uw website te laten bezoeken, maar dit wordt een echt probleem wanneer de laadtijden vertragen en uw hele server crasht. Uw fysieke of virtuele server heeft slechts zoveel middelen, zoals RAM en CPU-rekenkracht, en web servers moeten deze middelen efficiënt gebruiken.
  • Schaalbaarheid: Schaalbaarheid verwijst naar het krachtiger maken van uw bestaande servers door verticaal schalen, of het toevoegen van meer servers aan uw opstelling door horizontaal schalen. Naarmate uw publiek groeit, kunt u een punt bereiken waarop u meer dan één of twee kleine webservers nodig heeft.
  • Installatiegemak: Het snel opzetten van een project is essentieel voor de iteratie van uw project. Een eenvoudig en herhaalbaar installatieproces is belangrijk voor de eerste webserver die u opzet, en de meerdere webservers daarna wanneer u opschakelt.
  • Documentatie: Webservers zijn complex. De meest voorkomende configuraties helpen u snel op weg, maar uw behoeften zullen in de loop van de tijd toenemen. Vaak zult u functies nodig hebben die niet zo vaak worden gebruikt. Wanneer dat moment komt, is goede documentatie essentieel om aangepaste oplossingen voor uw behoeften te creëren.
  • Ontwikkelaarsondersteuning: Als de kernontwikkelaars niet toegewijd zijn aan hun eigen project, zou u uw project niet aan het hunne moeten toevertrouwen. Dit omvat zowel plannen voor langdurige ondersteuning voor hun software, samen met onmiddellijke kortetermijnondersteuning die ze bieden in de vorm van bugfixes en patches.
  • Community-ondersteuning: Een kernontwikkelingsteam zal het meeste werk doen, maar een bloeiende gemeenschap draagt bij aan het invullen van de lacunes. Bij open source projecten kan dit betekenen dat bijdragen aan de daadwerkelijke codebasis, maar een sterke gemeenschap zal ook uw vragen beantwoorden en helpen bij uw specifieke problemen.

Hoewel webservers verschillende oplossingen kunnen bieden, komen de oplossingen die ze bieden voort uit pogingen om dezelfde problemen aan te pakken. Deze problemen evolueren zelf in de loop van de tijd samen met de behoeften en verwachtingen van de eindgebruiker, waardoor dit een levende en steeds evoluerende lijst is.

Selectie van een Webserveroplossing

De meest populaire open source webservers zijn momenteel Apache en Nginx.

Apache kwam als eerste, en werd gebouwd in een tijd waarin het gebruikelijk was dat meerdere websites met hun eigen individuele configuratiebestanden allemaal op één webserver bestonden. Nginx kwam na Apache, op een moment waarop de behoeften verschoven van het bedienen van meerdere websites vanaf één server, en in plaats daarvan naar het bedienen van één website vanaf één server op een uiterst efficiënte manier onder belasting.

Hoewel webservers dezelfde doelen en problemen delen, zal de interpretatie en implementatie van elke oplossing verschillend zijn. De exacte antwoorden op deze problemen vormen de identiteit van elke webserveroplossing. Nginx en Apache worden hier belicht vanwege hun alomtegenwoordigheid, maar elke webserveroplossing zal een eigen mening hebben. Bij het selecteren van een webserver is het belangrijk om uw eigen behoeften in gedachten te houden voor uw specifieke project. Op die manier blijft uw evaluatiemethode, zelfs als het landschap van webserveraanbiedingen verandert, geworteld in uw eigen vereisten.

Hier zijn enkele belangrijke onderscheidende factoren in hoe webservers proberen de doelen van een webserver te bereiken:

Structuur van configuratiebestanden

Web servers slaan hun instellingen op in configuratiebestanden. U kunt uw web servers aanpassen door deze bestanden te bewerken. Het opslaan en organiseren van configuratiebestanden is een subjectieve, structurele kwestie die webserverproducten verdeelt.

De belangrijkste scheiding is tussen centralisatie en decentralisatie. Gedecentraliseerde configuratiebestanden bieden een granulair niveau van controle op een bestandssysteemniveau, wat voortkomt uit de behoefte om meerdere websites op één server te hosten. Gecentraliseerde configuraties richten zich niet op het hosten van meerdere websites op één server, maar focussen zich in plaats daarvan op het efficiënt bedienen van een enkele website. Deze configuraties vertrouwen op URI-patroonmatching, wat het matchen van URL’s met bestandsnamen en andere unieke identificatoren inhoudt, in plaats van te vertrouwen op matching tegen de directorystructuur van een webserver.

De .htaccess-bestanden van Apache vergemakkelijken een gedecentraliseerde configuratie als een functie, en elke ontwerpbeslissing vloeit voort uit deze focus op het bestandssysteem met een granulair niveau van controle. Nginx heeft niet dezelfde focus op het bestandssysteem en richt zich op URI-patroonmatching en een gecentraliseerde configuratie.

Omgaan met gelijktijdigheid

De fysieke en virtuele servers waarop u webservers uitvoert, hebben beperkte middelen zoals RAM en CPU-verwerking. Hoe uw webserver fundamenteel zijn verzoeken beheert, zal de grootste impact hebben op het efficiënt gebruik van uw middelen. Een enkel verzoek kan een volledig proces per verzoek genereren, of het kan worden afgehandeld op basis van gebeurtenissen. De capaciteit van uw webserver om meerdere gelijktijdige verzoeken efficiënt af te handelen, is gekoppeld aan fundamentele ontwerpbeslissingen.

Apache handelt verzoeken af door processen te genereren, wat middelen verbruikt met een snelheid die een probleem kan worden onder belasting. Het op gebeurtenissen gebaseerde systeem van Nginx gebruikt minder middelen en kan onder belasting performanter zijn.

Statische inhoud serveren

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

Nginx excelleert in het serveren van statische inhoud vanwege zijn op gebeurtenissen gebaseerde verzoekafhandeling. Apache kan ook statische inhoud serveren, maar in de meeste opstellingen niet met dezelfde snelheid en efficiëntie onder belasting vergeleken met Nginx.

Het serveren van dynamische inhoud

Wanneer inhoud wordt gewijzigd, verwerkt en aangepast afhankelijk van wie er om vraagt, wordt de inhoud dynamisch genoemd. Bijvoorbeeld, nadat je inlogt op een website, zal de website vaak dynamisch je gebruikersnaam invullen in de bovenste navigatiebalk. Dynamische inhoud voegt extra complexiteit toe omdat het de webserver dwingt om veel verzoeken uniek af te handelen op het moment dat het deze ontvangt. Inhoud op maat per verzoek kan niet aan iedereen worden geserveerd en kan niet universeel worden gecachet.

Het verwerken van dynamische inhoud intern verwijdert een extra abstractielaag die normaal gesproken het doorgeven van het verzoek aan een externe bibliotheek zou vereisen. Apache implementeert dynamische inhoudsverwerking op een native manier, met populaire oplossingsstapels zoals LAMP (Linux, Apache, MySQL, PHP). Nginx is meer taalagnostisch maar vereist externe bibliotheken zoals PHP-FPM om als een vergelijkbare oplossing te fungeren voor gebruiksscenario’s zoals de LAMP-stack.

Capaciteit voor omgekeerde proxy

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

De belangrijkheid van Nginx in het echte gebruik hangt sterk af van zijn reverse proxy-functies en efficiëntie. Veel serverconfiguraties plaatsen meerdere traditionele webservers achter een Nginx-reverse proxy, waarbij Nginx wordt gebruikt om te bepalen naar welke webserver het verzoek moet worden doorgestuurd op basis van belasting of regelconfiguratie. Deze tussenliggende rol stelt het zelfs in staat om samen te werken met Apache in sommige configuraties, waarbij het fungeert als een reverse proxy voor een traditionele Apache-webserver.

Ondersteunend ecosysteem

Zowel Nginx als Apache worden sterk ondersteund door hun respectievelijke ontwikkelingsteams en gemeenschap. Als de meest populaire open source webservers zijn leermiddelen overvloedig aanwezig. Apache wordt ondersteund door de Apache Software Foundation, een non-profitorganisatie, en zal altijd gratis zijn om te gebruiken. De kern van Nginx is open source, maar wenselijke functies zijn vergrendeld achter hun Nginx Plus-productaanbod met functies zoals upstream health checks, sessiepersistentie en geavanceerde monitoring.

Alternatieven voor de traditionele webserver

Als je een server wilt die te allen tijde klaar staat om te reageren op een inkomend HTTP-verzoek, dan is een webserver de beste oplossing voor deze taak. Naarmate je verder afwijkt van het focussen op het bedienen van HTTP-verzoeken, zullen web servers minder ideaal zijn. 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 opstelling.

Bovendien, doordat ontwikkelaars hun prioriteiten hebben verlegd in het toewijzen van ontwikkelingsmiddelen aan het beheren van web servers, zijn oplossingen zoals serverless, headless CMS en Jamstack ontstaan als reactie daarop. Deze oplossingen vereisen geen zelfgehoste web server, maar abstraheren de web serverlaag naar externe services. Voor ontwikkelaars die geen gedetailleerde of geavanceerde controle over de web serverlaag nodig hebben, kan de ontwikkeltijd elders worden gericht. Voor meer informatie, bekijk dit artikel over Jamstack met headless CMS of het implementeren van een full stack Jamstack met DigitalOcean’s App Platform.

Conclusie

In dit artikel ben je door een basisintroductie van wat web servers zijn, hoe ze worden gebruikt en de problemen die ze proberen op te lossen, gegaan. Gewapend met deze kennis heb je je verdiept in het huidige landschap van webserveroplossingen en heb je je kennis toegepast om de oplossing te vinden die specifiek aan jouw behoeften voldoet. Voor meer informatie over het opzetten en gebruiken van een webserver, bekijk de rest van onze Cloud Curriculum-serie over webservers.

Aanvullende Bronnen

Tutorials:

  • Hoe Apache te installeren: Stapsgewijze instructies voor het opzetten van je eerste Apache-server. Deze oplossing blinkt uit in gedecentraliseerde configuratie voor granulaire controle en interne verwerking van dynamische webpagina’s met koppelingen naar populaire programmeertalen zoals PHP.
  • Hoe Nginx te installeren: Stapsgewijze instructies voor het opzetten van je eerste Nginx-server. Deze oplossing blinkt uit in gecentraliseerde configuratie, bediening van statische bronnen, fungeren als omgekeerde proxy en omgaan met verkeer met hoge gelijktijdigheid.
  • Apache vs Nginx: Praktische Overwegingen: Een meer diepgaande blik op de twee belangrijkste spelers in het landschap van webserveroplossingen.

DigitalOcean Producten:

  • DigitalOcean Droplets: Virtuele privéservers voor het testen en implementeren van webservers.
  • DigitalOcean Functies: Serverloze oplossing die een alternatief kan zijn voor virtuele privéservers. Overslaan van het onderhoud van servers, focus op je toepassingscode.

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