Een reverse proxy bevindt zich vóór een webserver en ontvangt alle verzoeken voordat deze de origin server (doelserver) bereiken. Het werkt op dezelfde manier als een forward proxy, behalve dat het in dit geval de webserver is die de proxy gebruikt, in plaats van de gebruiker of de client. Reverse proxy’s worden doorgaans gebruikt om de prestaties van de webserver te verbeteren, maar ook ter verhoging van de beveiliging en betrouwbaarheid.

Voorbeeldje: je wil een niet-WordPress site hosten op het domein example.com op server A en je wil de blog daarvan laten draaien op WordPress op de URL example.com/blog op server B. Dit kan je doen door een reverse proxy toe te voegen voor de server die jouw primaire site host. Je kan de reverse proxy instellen om verzoeken naar de blog te redirecten naar een andere server (bijvoorbeeld via Kinsta’s managed WordPress hosting).

In dit artikel leren we je de basisprincipes van reverse proxyservers, hoe ze werken, wat hun belangrijkste voordelen zijn en hoe je ze kan gebruiken om je WordPress site te versnellen en te beveiligen.

Heb je er zin in? Let’s go!

Wat is een reverse proxy?

Om te begrijpen wat een reverse proxy is, moet je eerst meer weten over zijn rol en vertrouwd raken met alle bijbehorende termen.

Wanneer je normaal gesproken op het internet surft, voer je een domeinnaam in of klik je op een link. Vervolgens verbindt je browser/apparaat rechtstreeks met de server van de website en begint deze met het downloaden van de resources.

Zo werkt browsen op het internet normaal gesproken
Zo werkt browsen op het internet normaal gesproken

Als je je IP adres wil anonimiseren tegenover de websites die je bezoekt, dan kan je hiervoor een proxyserver gebruiken waar je al je verzoeken eerst naartoe stuurt. Deze stuurt vervolgens je verzoeken door naar de DNS resolver en vervolgens downloadt deze de website’s resources van de origin server.

Daarna geeft het deze resources door aan je apparaat. Dit wordt een forward proxy genoemd.

Zo werkt een forward proxyserver
Zo werkt een forward proxyserver

Je bent volledig verborgen voor de website omdat deze denkt dat jouw verzoek afkomstig is van de forward proxy.

Naast het verbeteren van de privacy van gebruikers, wordt een forward proxy voornamelijk gebruikt om geografische contentrestricties te omzeilen. Als je bijvoorbeeld een video wil kijken die in jouw regio is geblokkeerd, kan je een foward proxy gebruiken met een IP adres vanwaar je de video wél kan bekijken.

Een forward proxy werkt bijna hetzelfde als een Virtual Private Network (VPN), maar beide gebruiken compleet andere technologieën en hebben hun eigen use-cases (ook al kunnen ze soms overlappen).

Reverse proxyserver vs forward proxyserver

Een reverse proxyserver werkt als een soort schild dat voor de doelserver wordt geplaats om anonimiteit te behouden en de veiligheid te verbeteren, net als dat een gebruiker/client een forward proxy kan gebruiken om hetzelfde te bewerkstelligen. Het zorgt ervoor dat geen enkele gebruiker of client rechtstreeks communiceert met de doelserver.

Zo werkt een reverse proxyserver
Zo werkt een reverse proxyserver

Het verschil tussen een forward proxy vs een reverse proxy is klein, maar ze werken anders.

Beide kunnen tegelijkertijd actief zijn, omdat er geen overlap is tussen hun werking. Meestal gebruiken gebruikers/clients een forward proxy, terwijl (origin) servers een reverse proxy gebruiken.

Forward proxyservers vs reverse proxyservers
Forward proxyservers vs reverse proxyservers

Omdat een serveradmin kan bepalen hoe de reverse proxy werkt, kan je deze inzetten om veel handige functies in te schakelen.

Laten in dit artikel behandelen we alle voordelen.

Waarom zou je een reverse proxy gebruiken?

Veel bedrijven, en dan met name grote ondernemingen, gebruiken op maat gemaakte websites die afgestemd zijn op hun specifieke behoeften. Vaak draaien deze niet op WordPress. Enkele voorbeelden hiervan zijn websites van banken en verzekeringen.

In andere gevallen kan een bedrijf zijn site hosten op een externe service waar ze geen externe software op kunnen installeren (bijv. WordPress). Meestal zijn dit kleine tot middelgrote retailers die een e-commerce platform als Shopify gebruiken.

Omdat WordPress over robuuste CMS features beschikt, geven veel bedrijven, waaronder grote bedrijven met op maat gemaakte websites, er de voorkeur aan om hun blogs te hosten met WordPress.

Een manier om dit te omzeilen, is door WordPress op het subdomein van de hoofdwebsite te installeren en de navigatiemenu’s zo te configureren dat gebruikers makkelijk kunnen switchen tussen de hoofdwebsite en de blog.

Omdat subdomeinen zich gedragen als een uniek domein, kan dit de SEO van je site beïnvloeden. Hoewel Google subdomeinen en subdirectory’s gelijk behandelt, kost het meer moeite om een website te optimaliseren voor de zoekmachinerankings wanneer het is gehost op een subdomein dan wanneer het is gehost binnen een subdirectory.

Twee benaderingen voor het hosten van blogs op een website
Twee benaderingen voor het hosten van blogs op een website

Google heeft wederom bevestigd dat het subdomeinen en subdirectory’s gelijk behandelt, maar sommige experts zijn het hier niet mee eens. En zelfs als het de SEO van je site niet zou beïnvloeden, dan is een site die in een subdirectory wordt gehost, simpelweg makkelijker te onderhouden.

Daarom kan je een reverse proxy gebruiken om de verzoeken naar de site’s blog te redirecten naar een aparte server. Een bank kan bijvoorbeeld zijn hoofdwebsite op hun (extra) beveiligde servers hosten, maar kan zijn door WordPress aangedreven blog apart hosten bij een managed WordPress host als Kinsta.

Een voorbeeld van een reverse proxy in de praktijk
Een voorbeeld van een reverse proxy in de praktijk

Het verenigen van twee verschillende sites onder één domeinnaam is een van de belangrijkste voordelen van het gebruik van een reverse proxy. Het helpt merken om hun sites georganiseerd, professioneel en betrouwbaar te houden.

Voordelen van het gebruik van een reverse proxy

Naast de bovenstaande gebruiksvoorbeelden, bieden reverse proxy’s ook vele andere voordelen. In de onderstaande sectie bespreken we een aantal van de belangrijkste voordelen.

Loadbalancing

Een enkele origin server kan nooit al het inkomende verkeer afhandelen van een website met miljoenen dagelijkse unieke bezoekers. In deze gevallen kan je het verkeer slim verdelen over een pool van meerdere servers. Normaal gesproken hosten alle servers dezelfde content om te voorkomen dat een foutieve server de hele site platgooit, wat de website betrouwbaarder maakt.

Een reverse proxy is een uitstekende manier om dit op te zetten, omdat deze het inkomende verkeer kan ontvangen voordat het de origin server bereikt. Als de origin server overbelast raakt of volledig uitvalt, dan kan de reverse proxy het verkeer naar andere servers verdelen zonder dat de sitefunctionaliteit hieronder lijdt.

Reverse proxy’s kunnen ook op een andere manier het inkomende verkeer redirecten, waarbij elke server een specifieke functie uitvoert waarvoor deze is geoptimaliseerd. De reverse proxy kan dan vervolgens de responses van alle servers verzamelen en deze aan de client bezorgen.

Omdat de meest populaire toepassing van een reverse proxy loadbalancing is, worden ze ook wel Load Balancers genoemd.

Global Server Load Balancing (GSLB)

GSLB is een geavanceerde loadbalancingmethode om websiteverkeer te verdelen over veel servers die strategisch over de hele wereld zijn geplaatst. Dit wordt meestal gedaan via een techniek genaamd anycast routing, waarbij de reverse proxy de servernode kiest op basis van de snelste reistijd tussen de client en de server.

GSLB verhoogt niet alleen de betrouwbaarheid en beveiliging van de site aanzienlijk, het vermindert ook de vertraging en zorgt voor betere laadtijden, waardoor de gebruikerservaring wordt verbeterd. Je kan GSLB gebruiken in combinatie met andere netwerkoptimalisatietechnieken zoals Spoon Feeding om de rekenkracht van de origin servers nog verder te ontzien.

Hoewel je handmatig Global Server Load Balancing kan instellen op je server, wordt dit meestal verzorgd door dedicated CDN’s als Cloudflare en KeyCDN (die ook Kinsta CDN aandrijft). Alle sites die door Kinsta worden gehost profiteren van een Load Balancer aangedreven door Google Cloud Platform.

Verhoogde beveiliging

Reverse proxy’s kunnen het IP adres en andere kenmerken van de origin server maskeren. Zo kan de origin server van je website zijn anonimiteit beter behouden, waardoor de beveiliging aanzienlijk toeneemt.

Gezien de reverse proxy al het verkeer ontvangt voordat het de hoofdserver bereikt, maak je het aanvallers of hackers moeilijker om je website te targeten en voor beveiligingsbedreigingen te zorgen, zoals DDoS aanvallen.

Je kan een strikte firewall gebruiken om de reverse proxy te versterken met strengere beveiliging tegen veelvoorkomende cyberaanvallen. Als er geen reverse proxy is geïnstalleerd, is het moeilijker om malware te verwijderen of je site te fixen.

Een reverse proxy als HAProxy kan basisverificatie voor HTTP toegang toevoegen aan een webserver waarop dit niet is ingeschakeld. Ook kan je een reverse proxy gebruiken om voor verschillende soorten verzoeken op een gecentraliseerde plek authenticatie toe te voegen.

Krachtige caching

Ook voor webversnellingsdoeleinden kan je een reverse proxy gebruiken door zowel statische als dynamische content te cachen. Dit kan de belasting op de origin server verminderen, wat resulteert in een snellere website.

Als jouw origin server zich bijvoorbeeld in de VS bevindt en een gebruiker vanuit Europa je website bezoekt, kan je een gecachete versie van je site aanbieden vanaf een reverse proxy in Europa. Omdat de reverse proxy dichter bij de gebruiker staat dan de origin server, kost het minder tijd om de website te laden, wat de performance een enorme boost geeft.

Varnish en Nginxg FastCGI zijn prominente voorbeelden van reverse proxy’s die worden gebruikt voor het cachen van webcontent.

Als je site wordt gehost bij Kinsta, hoef je je geen zorgen te maken over caching, omdat Kinsta al het cachingwerk voor je regelt (inclusief geavanceerde features zoals Edge Caching).

Superieure compressie

Serverresponses verbruiken veel bandbreedte. Het comprimeren van serverresponses (bijvoorbeeld met gzip) voordat ze naar de client worden verzonden, kan de benodigde bandbreedte verminderen, wat de levering van de serverresponses versnelt.

Een reverse proxy is ideaal om de serverresponses te comprimeren aangezien deze zich tussen de origin server en de client bevindt.

Geoptimaliseerde SSL encryptie

Het voor elke client versleutelen en ontsleutelen van SSL/TLS verzoeken kan zeer belastend zijn voor de origin server. Een reverse proxy kan deze taak overnemen zodat de resources van de origin server gebruikt kunnen worden voor andere belangrijke taken, zoals het leveren van content.

Een ander voordeel van het offloaden van SSL/TSL versleuteling en ontsleuteling is het verminderen van de vertraging voor clients die geografisch ver verwijderd zijn van de origin server.

Ook kan je kiezen voor een reverse proxy met voor SSL/TLS gespecialiseerde hardware om deze taak nog verder te versnellen. Een dergelijke reverse proxy wordt een SSL/TLS termination proxy genoemd. Sommige server, zoals Varnish, ondersteunen geen SSL/TSL protocollen. Een SSL/TSL termination reverse proxy kan hierbij dus helpen om te zorgen dat het verkeer dat er doorheen gaat, te beveiligen.

Betere A/B tests

De meeste A/B testtools vereisen dat je externe JavaScript library’s gebruiken om hun functies te laden. Het laden van externe scripts kan de laadtijd van je pagina echter vertragen en zorgen voor een schokkerige ervaring voor gebruikers.

In plaats daarvan kan je een reverse proxy gebruiken om op serverniveau twee afzonderlijke flows te maken. Je kan bijvoorbeeld de methodes split_clients of sticky route van Nginx gebruiken om verkeersredirects te regelen.

Op Nginx en freeCodeCamp kan je tutorials raadplegen om meer te leren over het doen van A/B tests met een reverse proxy.

Het monitoren en loggen van verkeer

Een reverse proxy legt alle verzoeken vast die er doorheen gaan. Je kan ze daarom goed gebruiken als centrale hub om verkeer te monitoren en te loggen. Zelfs als je meerdere webservers gebruikt om alle componenten van je website te hosten, kan het gebruik van een reverse proxy het je makkelijker maken om alle inkomende en uitgaande data van je site te monitoren.

De meest populaire reverse proxy’s

Volgens W3Techs, gebruikt van de sites die zij monitoren bijna 83% geen reverse proxy.

Statistieken van reverse proxy's die door websites worden gebruikt
Statistieken van reverse proxy’s die door websites worden gebruikt (bron: W3Techs.com)

Van de 17% websites die wel een reverse proxy gebruiken (hierboven vermeld), zal je zien dat de meeste hiervan CDN’s zijn. Dat komt doordat de meeste reverse proxy’s hun bestaan normaal gesproken verbergen uit veiligheidsoverwegingen. Dat is ook de reden dat je niet kan vertrouwen op websitemonitoringservices als W3Techs om te achterhalen welke reverse proxy’s het populairst zijn.

Op basis van eigen onderzoek en ervaring, zijn dit de meest populaire reverse proxy’s die tegenwoordig worden gebruikt:

Nginx

Nginx is een opensource webserver die ook kan dienen als reverse proxy. Behalve dat het wordt gebruikt om websites te hosten, is het ook een van de meest gebruikte oplossingen voor reverse proxy en loadbalancing. Volgens Netcraft gebruikten meer dan 479 miljoen webservers Nginx (december 2019), waarmee het de leider is wat betreft marktaandeel van webservers.

Marktaandeel webservers van alle sites
Marktaandeel webservers van alle sites (bron: Netcraft)

Nginx biedt alle voordelen van reverse proxy’s die we hierboven bespraken, en nog een hele hoop meer. Het verbetert webprestaties, beveiliging, betrouwbaarheid en schaalbaarheid. Je kan Nginx configureren met het configuratiebestand, dat ook hot reloadable is. Bij Kinsta is Nginx reverse proxy een van de verscheidene premium add-ons die je kan gebruiken.

Maar je kan ook Nginx Plus gebruiken, de commerciële versie, om toegang te krijgen tot op API gebaseerde configuratie-opties en andere features die bedoeld zijn voor websites van grote ondernemingen.

Bij Kinsta draaien alle websites op Nginx. Het heeft in elke categorie waarin het heeft deelgenomen de Top Tier webhostingstatus van Review Signal verdiend. Een aantal andere grote bedrijven die Nginx gebruiken, zijn MaxCDN, Cloudflare en Netflix.

Nginx instellen als een standaard reverse proxy is eenvoudig. Nginx heeft verder uitgebreide documentatie met richtlijnen waarmee je de reverse proxy kan aanpassen aan jouw vereisten. Hoe je dit doet, bespreken we verderop in dit artikel. Als je klant bent bij Kinsta, dan leer je in dezelfde sectie hoe je een reverse proxy opzet voor een site die bij Kinsta wordt gehost.

Varnish

Varnish is een opensource HTTP reverse proxy met een ingebouwde cache-engine. Het is voornamelijk ontworpen voor websites met veel verkeer en dynamische inhoud. Je kan Varnish ook als loadbalancer gebruiken, als web app firewall (WAF) of als edge authentication en authorization server.

Het werkt op alle moderne versies van Linux en FreeBSD en wordt voornamelijk gebruikt als een front voor Nginx of Apache webservers. Met de krachtige en zeer flexibele Varnish Configuration Language (VCL) kan je verschillende functies definiëren zoals het verwerken van HTTP verzoeken, caching en verbinding maken met een of meerdere webservers.

Om deze reden gebruiken veel CDN’s Varnish als hun belangrijkste basis om snel content te leveren.

Varnish ondersteunt ook Edge Side Includes (ESI), een taal die je helpt om secties van een webpagina opnieuw te gebruiken voor andere pagina’s. Als je website veel herhaalde inhoud op verschillende pagina’s gebruikt, kan ESI je helpen de laadtijden van je pagina’s te versnellen door veelgebruikte secties in het cachegeheugen te plaatsen.

Je kan Varnish uitbreiden met verschillende modules (VMOD’s). Ga naar de officiële tutorial van Varnish om te leren hoe je Varnish instelt als een reverse proxy voor WordPress.

 

Apache Traffic Server

Apache Traffic Server is een opensource caching proxyserver. Het is populair vanwege zijn snelle, schaalbare functies. Ooit was het een door Yahoo! ontwikkeld commercieel product, tot ze het opensource maakten en het voor onderhoud schonken aan de Apache Foundation.

Verschillende grote contentnetwerken en CDN’s als Comcast, Akamai, LinkedIn, Yahoo en Apple gebruiken Apache Traffic Server om hun technologie aan te drijven.

Ook kan je Apache HTTP Server (Apache httpd), een HTTP server daemon, gebruiken om op je webserver een reverse proxy in te stellen. Behalve dat het fungeert als eenvoudige webserver, helpt het je ook om statische en dynamische inhoud aan gebruikers te leveren. Verderop in dit artikel leer je hoe je Apache instelt als een reverse proxy.

HAProxy

HAProxy is een opensource reverse proxy en loadbalancer. Het is ontworpen om te integreren met de meeste bestaande webserverarchitecturen, inclusief Linux distributies en cloudplatforms. Net als bij Nginx gebruikt HAProxy een event-driven I/O model en ondersteunt deze het splitsen van verzoeken over meerdere werkprocessen.

Voor HTTP verzoeken presteert HAProxy uitzonderlijk goed, zelfs onder zware belasting. Een aantal van ’s werelds meest bezochte websites op internet, zoals Airbnb, Reddit, Instagram, Stack Overflow, Tumblr, GitHub en Imgur, gebruiken HAPROXY om hun websites efficiënt te leveren.

Het bespreken van hoe je HAProxy kan implementeren, valt buiten het bestek van dit artikel, maar je kan altijd hun documentatie raadplegen als je wil weten hoe het werkt.

Opmerking: Traefik en Envoy zijn twee andere opensource alternatieven voor HAProxy. Beide zijn krachtige high-performance reverse proxy’s en loadbalancers met veel geavanceerde functies.

Andere populaire reverse proxy’s zijn AWS Elastic Load Balancer, GLBC, DigitalOcean Load Balancer en Google Cloud Load Balancer. Voor een volledige lijst van de beste reverse proxy’s en loadbalancers die vandaag de dag worden gebruikt, kan je kijken bij Stackshare.io.

Reverse proxy: hoe gebruik je ze voor WordPress sites

In het algemeen zijn er drie toepassingen van een reverse proxy voor WordPress sites (inclusief sites die worden gehost door Kinsta).

Het laden van een "Main Site" vs een "Proxied Site"
Het laden van een “Main Site” vs een “Proxied Site”

We gebruiken voor dit voorbeeld alleen Nginx, omdat dit voor WordPress sites tegenwoordig de meest populaire reverse proxy is. Dezelfde basisprincipes zijn echter van toepassing op andere reverse proxy’s.

Het is vaak een uitdaging om reverse proxy’s te installeren, configureren en onderhouden. Om deze reden heeft Kinsta een $50 maandelijks add-on abonnement voor elke reverse proxy waarbij je hulp nodig hebt bij het installeren ervan. Je kan contact opnemen met Kinsta’s supportteam voor meer informatie.

1. Hoofd- en proxied site worden op dezelfde server gehost

Als zowel de hoofdsite als de proxied site op dezelfde server worden gehost, dan kan de hoofdsite op een WordPress installatie lopen, terwijl een aparte WordPress installatie de proxied site voedt.

Aangezien je toegang hebt tot zowel de sites als hun gedeelde webserver, kan je reverse proxy-regels instellen voor de hoofdsite en vervolgens de proxied site configureren om te laden vanaf de reverse proxy.

Als je beide sites op Kinsta host, kan je contact opnemen met het supportteam van Kinsta en hen vragen om de reverse proxy voor je in te stellen. Dit is de procedure die je moet volgen:

  • Zorg ervoor dat zowel de hoofdsite als de proxied site bij Kinsta worden gehost. Als dat niet het geval is, kan je beide sites naar de Kinsta omgeving migreren, hetzij handmatig, hetzij door een migratieverzoek in te dienen.
  • Open een supportticket en geef het supportteam van Kinsta een duidelijke beschrijving van de domeinconfiguratie. Het duurt ongeveer een werkdag om de reverse proxy in te stellen.
  • Kinsta zal de relevante reverse proxy-regels op de hoofdsite opzetten en de proxied site configureren om via de reverse proxy te laden.

Dit zijn de standaard Nginx reverse proxy directives die Kinsta gebruikt om een subdirectory site via een reverse proxy te laden:

location ^~ /subfolder/ {
proxy_pass http://subfolder.domain.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

In de bovenstaande code moet je de /subfolder placeholder vervangen door de daadwerkelijke naam van de subdirectory (bijv. /blog/, /shop/). Bovendien moet het subdomein http://subfolder.domain.com overeenkomen met de URL die wordt gebruikt om de reverse proxy naar de proxied site te laten wijzen.

De location directive bevat caret- en tilde-symbolen (^~) om Nginx te laten weten dat als het de gedefinieerde string vindt, het moet stoppen met zoeken naar verdere overeenkomsten en het de hier vermelde directives moet gebruiken. Lees meer over de reverse proxy-directives van Nginx in de documentatie.
Vervolgens moet je de proxied site configureren om via de reverse proxy te laden. Hier zijn de standaardstappen die Kinsta volgt om de proxied site te configureren:

  • Een subdirectory wordt aangemaakt op het pad waarvandaan de proxied site wordt geladen. Alle bestanden van deze proxied site worden naar deze subdirectory verplaatst.
  • De configuratiebestanden van de webserver worden bijgewerkt om de nieuwe subdirectory te definiëren als de hoofdmap van de proxied site. Bovendien moet je een rewrite-regel toevoegen om de subdirectory te verwijderen uit de request URI voor elk inkomend verzoek.
  • Vervolgens moeten alle URL’s in de database van de proxied site worden bijgewerkt zodat ze overeenkomen met de URL’s van de livesite (bijv. example.com/blog).
  • Het wp-config.php bestand van de proxied site moet worden bijgewerkt met de $_SERVER['HTTP_HOST'] definitie, zodat deze naar de URL van de hoofdsite verwijst.
  • Als je een SSL certificaat gebruikt, moet je strikte regels opstellen in het wp-config.php bestand om redirectloops te voorkomen.

Opmerking: een proxied site kan geen URL’s maken die dezelfde subdirectory dupliceren waaronder de proxied site wordt geladen. Een proxied site op example.com/blog kan bijvoorbeeld pagina of directory maken op example.com/blog/blog.

2. Alleen de proxied site wordt op je server gehost

Als je alleen toegang hebt tot de proxied site en zijn webserver, moet je contact opnemen met de serveradmin van de hoofdsite en ze vragen om de reverse proxy-regels voor je in te stellen.

Om dat te doen, moet je dezelfde stappen volgen als hierboven beschreven, behalve dat je in dit geval de regels op twee verschillende servers moet configureren.

Om je proxied site op Kinsta te hosten, moet je een domein toevoegen aan de site die naar de reverse proxy verwijst. Meestal kan je hier het beste een subdomein voor gebruiken (bijv. blog.example.com) om de proxied site te laden en is een subdirectorylink hiervoor minder geschikt (bijv. example.com/blog).

Nadat je je proxysite op Kinsta hebt ingesteld, kun je contact opnemen met het supportteam van Kinsta om de proxysite te configureren om deze te laden via een omgekeerde proxy. Ons supportteam heeft hierbij het echte IP adres van je server nodig om het installatieproces te voltooien op een manier die bezoeken op de juiste manier telt. Als je geen statisch IP adres kunt opgeven vanwege dynamische IP beperkingen van bepaalde providers (bijvoorbeeld AWS CloudFront), wordt je plan omgezet naar een vergelijkbaar op bandbreedte gebaseerd pakket.

Ten slotte valt het instellen van de reverse proxy op je server buiten de omvang van de Kinsta support, aangezien alleen de serverbeheerder hiervoor kan zorgen.

3. Alleen de hoofdsite wordt op je server gehost

Als je alleen toegang hebt tot de hoofdsite en zijn webserver, dan moet je de reverse proxy en de bijbehorende regels zo instellen dat deze de proxied site vanaf een externe host kan laden. Het installeren en configureren van de proxied site zodat deze via de reverse proxy laadt is de verantwoordelijk van de admin van deze tweede server.

Als je hoofdsite bij Kinsta wordt gehost, dan kan het Kinsta supportteam je helpen. Je kan een supportticket openen en ze vragen om de standaard reverse proxyregels toe te voegen die we eerder in dit artikel vermeldden. Je kan indien nodig ook aanvullende aanpassingen aan die regels laten toevoegen.

In dit scenario draag jij de volledig verantwoordelijkheid voor het configureren van de proxy site om deze correct te laden via de reverse proxy.

Hoe stel je Nginx in als reverse proxy?

Als je Kinsta niet gebruikt voor hosting en serverbeheer, dan moet je de reverse proxy zelf opzetten en configureren zodat deze naar de proxied site verwijst.

De installatie van Nginx verschilt en is afhankelijk van het besturingssysteem van de webserver. Voor Linux distributies kan je verschillende Nginx pakketten gebruiken op basis van de versie van je Linux distributie.

In het onderstaande voorbeeld installeerden we de primaire site op de domeinnaam example.com, terwijl we de WordPress proxied site installeerden op het subdomein blog.domain.com. Beiden worden ze aangedreven door Apache op een webserver die draait op Ubuntu 18.04. We installeren en configureren Nginx als een reverse proxy op de hoofdserver.

1. Installeer Nginx

Om te beginnen moet je de terminal van je server openen met SSH. Gebruik vervolgens het commando apt-get om de lijst met packages van je distributie bij te werken en installeer Nginx op je webserver.

sudo apt update
sudo apt install nginx

2. Configureer Nginx om verzoeken te proxyen

Vervolgens moet je Nginx configureren om verzoeken te “proxy-en” voor domeinen die gehost worden op Apache. Maak hiervoor een nieuw virtual host bestand aan. In dit voorbeeld gebruik ik de nano editor om de code toe te voegen, maar je kan elke code-editor die je wil.

sudo nano /etc/nginx/sites-available/example.com.conf

Vervolgens moet je de Nginx directives instellen zodat deze de verzoeken doorstuurt naar Apache. Dit doe je door de volgende server {...} en location blokken toe te voegen:

server {
listen      80;
server_name example.com www.example.com;
index       index.php;
root        /var/www/example.com/public    # fallback for index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}location /blog {
proxy_pass http://blog.domain.com;proxy_http_version                 1.1;
proxy_cache_bypass                 $http_upgrade;

# Proxy headers
proxy_set_header Upgrade           $http_upgrade;
proxy_set_header Connection        "upgrade";
proxy_set_header Host              $host;
proxy_set_header X-Real-IP         $remote_addr;
proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host  $host;
proxy_set_header X-Forwarded-Port  $server_port;

# Proxy timeouts
proxy_connect_timeout              60s;
proxy_send_timeout                 60s;
proxy_read_timeout                 60s;
}

In de bovenstaande code definieer ik een subdirectory example.com/blog link die wordt geleverd door de Apache server. Zorg ervoor dat het openbare IP adres (of URL) van de proxywebsite gebruikt in de proxy_pass directive. In mijn geval wordt mijn proxywebsite gehost op het subdomein blog.domain.com.

Opmerking: Zorg ervoor dat de proxied site is geïnstalleerd en klaar is voor gebruik, voordat je wijzigingen aanbrengt.

Je kan meer leren over alle reverse proxydirectives die hier gebuikt zijn in de gedetailleerde directive-index van Nginx.

3. Sla het aangemaakte virtual hosts bestand op

Activeer vervolgens de nieuwe virtual host door een symlink aan te maken voor de bestanden met de naam example.com.conf in zowel de /etc/nginx/sites-available als de /etc/nginx/sites-enabled directories.

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf

4. Test Nginx op fouten

Test daarna Nginx op configuratiefouten.

sudo nginx -t

Als er geen fouten optreden, laad dan Nginx opnieuw om de wijzigingen af te dwingen.

sudo systemctl reload nginx

Je hebt nu met succes Nginx ingesteld om als reverse proxy te werken. Om het te bevestigen, kan je de phpinfo() functie gebruiken om de PHP variabelen te controleren die worden geladen wanneer je je proxied site bezoekt.

Onder de SERVER_SOFTWARE en DOCUMENT_ROOT PHP variabelen zie je dat Apache dit domein levert op de back-end. Maar HTTP__X_REAL_IP en HTTP_X_FORWARDED_FOR PHP variabelen bevestigen dat Nginx werd gebruikt als reverse proxy om de verzoeken door te sturen.

Je kan de levering van je WordPress site door Nginx versnellen met de modules fastcgi_cache en ngx_cache_purge. De eerste module cachet je site, de tweede module leegt de cache automatisch op basis van specifieke gebeurtenissen (bijvoorbeeld het publiceren of bewerken van een WordPress bericht/pagina).

Je kan de WordPress plugin Nginx Cache Controller gebruiken om de Nginx proxy servercache rechtstreeks vanaf het WordPress beheerdersdashboard te regelen. Als je een WordPress Multisite installatie beheert, kan je met de Nginx Helper plugin hetzelfde doen.

Bekijk de hoofddocumentatie van Nginx en de Nginx WordPress installatiehandleiding voor een gedetailleerd overzicht van hoe je met Nginx en WordPress kan werken.

Hoe stel je Apache in als reverse proxy?

Voordat je begint, moet je ervoor zorgen dat er twee websites actief zijn op example.com en blog.domain.com(dit zijn voorbeelden, voor de duidelijkheid). De eerste website hoeft niet per se een WordPress site zijn, maar de tweede moet dit wel zijn, omdat het voornamelijk wordt gebruikt om de blog van het hoofddomein te laden op de example.com/blog subdirectorylink.

1. Begin met het configureren van Apache

Je kunt dit doen door de terminal van je server via SSH te openen en de proxy-module van Apache in te schakelen.

sudo a2enmod proxy proxy_http ssl

Als je het bovenstaande commando uitvoert, wordt Apache waarschijnlijk opnieuw gestart om de net gedefinieerde directives opnieuw te laden.

2. Maak een omgekeerde proxy aan

Bewerk vervolgens het virtual host bestand om een reverse proxy te maken. Dit is de code die je moet toevoegen:

<VirtualHost *>
DocumentRoot /var/www/app/public
SSLProxyEngine On    ProxyRequests off
ProxyPass /blog http://blog.domain.com
ProxyPassReverse /blog  http://blog.domain.com
</VirtualHost>

De ProxyPass directive maakt een reverse proxy aan voor de opgegeven paden, terwijl de ProxyPassReverse directive de HTTP responsheaders onderschept die via deze reverse proxy worden verzonden en ze herschrijft zodat ze overeenkomen met de Apache server.

3. Bewerk je wp-config.php bestand

Nadat je het bestand hebt opgeslagen, moet je je wp-config.php bestand bewerken door de volgende code toe te voegen – net voor de regel die je vraagt om te stoppen met bewerken.

# ProxyPass Settings
# overrides the variables below to ensure that any
# request to /blog/* subdirectory is taken care of properly
$_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
$_SERVER['SCRIPT_NAME'] = '/blog' . $_SERVER['SCRIPT_NAME'];
$_SERVER['PHP_SELF'] = '/blog' . $_SERVER['PHP_SELF'];

4. Werk de database van je WordPress site bij

Ten slotte moet je de database van je WordPress site bijwerken om de configuratiewaarden voor de /blog subdirectorylink toe te voegen. Je kan dit doen met de volgende SQL query:

UPDATE wp_options SET option_value = 'https://www.example.com/blog' WHERE option_name IN( 'siteurl', 'home' );

Nu zou je de URL https://www.example.com/blog moeten kunnen bezoeken waarna de site die wordt gehost op subdomein https://blog.domain.com primeren wordt geladen, zonder dat de URL verandert. Je kan WordPress gewoon blijven gebruiken, door je site browsen, schrijven, bewerken, beheren, etc.

Wat zijn de beperkingen van een reverse proxy?

  • Een reverse proxy vormt een aanzienlijk beveiligingsrisico, aangezien deze al het verkeer dat er doorheen gaat kan lezen en wijzigen. Als je HTTPS verkeer door de reverse proxy stuurt, dan moet het de meegestuurde data decoderen en opnieuw coderen. Dit betekent dat het de private keys van het SSL/TLS certificaat moet hebben. Dat betekent dat als kwaadwillenden je reverse proxy weten te hacken, dat ze wachtwoorden kunnen stelen en malware kunnen injecten in je websites.
  • Als jij of je gebruikers geen rechtstreekse toegang hebben tot je hoofdserver, dan kan het gebruik van een reverse proxy leiden tot een single point of failure. Als je bijvoorbeeld een reverse proxy gebruikt als front om meerder domeinen te bedienen, dan de storing ertoe leiden dat alle domeinen tegelijkertijd offline gaan.
  • Als je vertrouwt op een externe reverse proxy (bijv. Cloudflare) dan geef je in feit de gevoelige informatie van je site aan hen. Hoewel het een betrouwbare partij is, kan je niet voorspellen waartoe het kan leiden.
  • Door back-ups te herstellen of het pushen van een testomgeving naar live van websites die via een reverse proxy laden, kan een proxied site niet meer correct laden.

Kiezen tussen een CDN en een reverse proxy

CDN’s zijn een geavanceerde vorm van reverse proxy waarbij de meeste configuratie en onderhoud door een derde partij wordt verzorgd. Ze kunnen geweldige prestatievoordelen voor je WordPress site bieden met van jouw kant slechts een kleine inspanning.

CDN’s cachen niet alleen content en leveren deze versneld aan gebruikers, maar ze verminderen ook de belasting op je origin servers, verlagen de bandbreedtekosten, bieden een extra beveiligingslaag, stimuleren de SEO van je site en helpen je jewebsite beter te schalen.

Je zal merken dat de meeste voordelen van CDN’s hetzelfde zijn als die van reverse proxy’s. Dus, moet je nu een CDN kiezen of een reverse proxy?

Er is geen reden waarom je niet voor beide zou kunnen kiezen. Als je al een reverse proxy hebt geïnstalleerd, zal je nog steeds snelheids- en prestatieverbeteringen zien bij het gebruik van een CDN. Beide caches stapelen erg goed op elkaar, dus als je unieke behoeftes hebt voor het afhandelen van verzoeken (bijv. dynamische content, e-commerce) dan kan je dit makkelijk zelf configureren met een aantal custom headers die via de CDN of reverse proxy worden geleverd.

Reverse proxy – FAQ

Hier zijn nog een paar veelgestelde vragen die je kunnen helpen om alles over een reverse proxy te begrijpen.

Wat is het doel van een reverse proxy?

Om de locatie van een externe site te maskeren, zodat het lijkt alsof die deel uitmaakt van het hoofddomein. Een universiteit kan bijvoorbeeld een inloggedeelte voor studenten hebben om hun cijfers te bekijken. In plaats van die in WordPress te hosten, hebben ze waarschijnlijk een server op hun campus waarop beoordelingssoftware draait. In plaats van studenten te vertellen dat ze naar https://123.123.123.123/~students/grading_software/some/long/url/ moeten gaan, kunnen ze simpelweg gebruik maken van een reverse proxy, zodat studenten naar https://university.edu/grades kunnen gaan en het lijkt alsof het onderdeel is van de hoofdsite, terwijl het in feite op een ander platform wordt gehost.

Is een CDN een reverse proxy?

Nee, een CDN is een Content Delivery Network dat helpt om delen van de website sneller te leveren vanaf een locatie dichter bij de locatie van de bezoeker.

Is een loadbalancer een reverse proxy?

Nee, een load balancer is een manier om het verkeer te verdelen. Een zeer drukke site kan bijvoorbeeld een loadbalancer hebben die het verkeer over meerdere webservers verdeelt. De webservers hebben allemaal een mirror van dezelfde sitebestanden, maar hierdoor kan de site meer verkeer verwerken dan normaal, omdat de loadbalancer het inkomende verkeer naar elke webserver stuurt, zodat geen enkele webserver AL het inkomende verkeer tegelijk hoeft af te handelen. Dus als een webserver is ingesteld op 10k bezoeken per minuut, en je hebt twee webservers achter een loadbalancer, dan zou de site in theorie 20k bezoeken per minuut aankunnen.

Is een API gateway een reverse proxy?

Nee, met een API kan iemand eenvoudigweg opdrachten uitvoeren op een platform zonder in te hoeven loggen op een UI om een site te beheren. Met de API zou een klant een nieuw blogbericht kunnen plaatsen op zijn WordPress site zonder in te loggen op het WordPress dashboard.

Heb ik een reverse proxy nodig?

Dit kan je per geval bekijken. Niet iedereen heeft een reverse proxy nodig, maar in het geval van de hierboven genoemde universiteit is het zinvol. Dit kan ook om andere redenen zijn, zoals Ford/Chevy/etc die misschien een “Bouw je auto” sectie op hun site hebben, die geen deel uitmaakt van de hoofdsite, maar een of ander auto-bouw/aanpassingsplatform dat ze als onderdeel van de hoofdsite willen hebben, zoals https://ford.com/buildmycar in plaats van https://carbuildingplatform.com/ford/build/customcar/.

 

Samenvatting

WordPress is zeer flexibel. Je kan het als blog, e-commerce site aanzienlijk of zelfs als Learning Management System gebruiken. In de meeste gevallen kan je WordPress aanpassen aan je unieke vereisten.

Soms is het echter nodig om een apart domein of secundaire server te gebruiken om een extra site te hosten. Dit kan bijvoorbeeld komen omdat er verschillende technologiestacks worden gebruikt voor een grote zakelijke website of omdat er een WordPress blog wordt gelanceerd op een reeds bestaande niet-WordPress site.

Een reverse proxy kan in beide gevallen helpen, zodat je het meeste uit WordPress kan halen, zonder dat je de hoofdwebsite op moet geven en opnieuw moet beginnen.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.