Reverse proxy's zijn een handig hulpmiddel in de toolkit van elke systeembeheerder. Ze hebben veel toepassingen, waaronder load balancing, bescherming tegen DDOS-aanvallen
Wat zijn reverse proxy's?
Een gewone proxy, een Forward Proxy genaamd, is een server waar de verbinding van een gebruiker doorheen wordt geleid. In veel opzichten is het als een eenvoudige VPN, die zich voor uw internetverbinding bevindt. VPN's zijn hiervan een bekend voorbeeld, maar ze bevatten ook zaken als schoolfirewalls, die de toegang tot bepaalde inhoud kunnen blokkeren.
Een reverse proxy werkt iets anders. Het is een backend-tool die wordt gebruikt door systeembeheerders. In plaats van rechtstreeks verbinding te maken met een website die inhoud aanbiedt, kan een omgekeerde proxy zoals NGINX in het midden zitten. Wanneer het een verzoek van een gebruiker ontvangt, zal het dat verzoek doorsturen, of "proxy", naar de uiteindelijke server. Deze server wordt de "origin-server" genoemd, omdat deze daadwerkelijk op verzoeken zal reageren.

Hoewel een gebruiker waarschijnlijk weet of ze worden omgeleid via een forward proxy zoals een VPN of firewall, zijn reverse proxy's backend-tools. Voor zover de gebruiker weet, maken ze gewoon verbinding met een website. Alles achter de reverse proxy is verborgen, en dit heeft ook tal van voordelen.
Dit effect gebeurt echter ook omgekeerd. De oorspronkelijke server heeft geen directe verbinding met de gebruiker en ziet alleen een aantal verzoeken afkomstig van het IP-adres van de omgekeerde proxy. Dit kan een probleem zijn, maar de meeste proxyservices zoals NGINX zullen headers zoals
X-Forwarded-For aan het verzoek toevoegen. Deze headers informeren de oorspronkelijke server over het werkelijke IP-adres van de client.
Waar worden reverse proxy's voor gebruikt?
Reverse proxy's zijn vrij eenvoudig van opzet, maar blijken een verrassend handig hulpmiddel te zijn met veel onverwachte gebruiksgevallen.
Load Balancing
Een van de belangrijkste voordelen van een reverse proxy is hoe licht ze kunnen zijn. Omdat ze alleen verzoeken doorsturen, hoeven ze niet veel te verwerken, vooral in situaties waarin een database moet worden opgevraagd.

Dit betekent dat de bottleneck vaak de origin-server is, maar met een reverse proxy ervoor, kun je gemakkelijk meerdere origin-servers hebben. De proxy kan bijvoorbeeld 50% van de verzoeken naar de ene server sturen en 50% naar een andere, waardoor de capaciteit van de website wordt verdubbeld. Diensten zoals HAProxy zijn ontworpen om hier goed mee om te gaan.
Dit is een veel voorkomende use-case en de meeste cloudproviders zoals Amazon Web Services (AWS) bieden load balancing als een service, waardoor u de moeite bespaart om het zelf in te stellen. Met cloudautomatisering kunt u zelfs automatisch het aantal oorspronkelijke servers opschalen als reactie op verkeer, een functie die 'auto-scaling' wordt genoemd.
Load balancers zoals de Elastic Load Balancer van AWS kunnen worden ingesteld om zichzelf automatisch opnieuw te configureren wanneer uw oorspronkelijke servers op en neer gaan, allemaal mogelijk gemaakt door een omgekeerde proxy onder de motorkap.
Caching
Omdat een reverse proxy vaak veel sneller reageert dan de oorspronkelijke server, wordt een techniek genaamd caching vaak gebruikt om verzoeken op veelvoorkomende routes te versnellen. Caching is wanneer de paginagegevens worden opgeslagen op de reverse proxy en slechts om de paar seconden/minuten worden opgevraagd bij de oorspronkelijke server. Dit vermindert de belasting van de oorspronkelijke server drastisch.
Dit artikel dat u nu leest, werd bijvoorbeeld geleverd door WordPress, dat met een SQL-database moet praten om de inhoud en metadata van het artikel op te halen. Dat doen voor elke paginavernieuwing is verspilling, aangezien de pagina niet echt verandert. Deze route kan dus in de cache worden opgeslagen en de omgekeerde proxy stuurt gewoon het laatste antwoord terug naar de volgende gebruiker, in plaats van WordPress opnieuw lastig te vallen.
Een speciaal netwerk van reverse proxy's die uw inhoud in de cache plaatsen, wordt een Content Delivery Network of CDN genoemd. CDN's zoals CloudFlare of Fastly worden zeer vaak gebruikt door grote websites om de wereldwijde levering te versnellen. De servers over de hele wereld die de inhoud in de cache plaatsen, worden "edge nodes" genoemd en als u er veel van heeft, kan uw website erg pittig worden.
Netwerkbescherming en privacy
Omdat de gebruiker niet weet wat er achter de reverse proxy zit, kunnen ze uw oorspronkelijke servers niet gemakkelijk rechtstreeks aanvallen. In feite worden reverse proxy's vaak gebruikt met origin-servers in privé-subnetten, wat betekent dat ze helemaal geen inkomende verbindingen met het externe internet hebben.
Dit houdt uw netwerkconfiguratie privé, en hoewel beveiliging door onduidelijkheid nooit onfeilbaar is, is het beter dan deze open te laten voor aanvallen.
Dit inherente vertrouwen kan ook nuttig zijn bij het plannen van uw netwerk. Een API-server die met een database praat, is bijvoorbeeld vergelijkbaar met een reverse proxy. De database weet dat hij de API-server in het privé-subnet kan vertrouwen, en de API-server fungeert als de firewall voor de database en laat alleen de juiste verbindingen erdoorheen.
Configureerbare frontend
Een van de voordelen van reverse proxy's zoals NGINX is hoe zeer configureerbaar ze zijn. Vaak zijn ze handig om voor andere services te hebben, alleen om te configureren hoe gebruikers toegang krijgen tot die services.
NGINX kan bijvoorbeeld limietverzoeken voor bepaalde routes beoordelen, wat kan voorkomen dat misbruikers duizenden verzoeken doen aan oorspronkelijke servers vanaf één enkel IP-adres. Dit stopt DDOS-aanvallen niet, maar het is goed om te hebben.
NGINX kan ook verkeer van meerdere domeinnamen doorsturen met configureerbare "server" -blokken. Het kan bijvoorbeeld verzoeken sturen naar
example.com
naar uw oorspronkelijke server, maar stuur
api.example.com
naar uw speciale API-server, of
files.example.com naar uw bestandsopslag, enzovoort. Elke server kan zijn eigen configuratie en regels hebben.
NGINX kan ook extra functies toevoegen bovenop bestaande oorspronkelijke servers, zoals gecentraliseerde HTTPS-certificaten en headerconfiguratie.
Soms is het handig om NGINX op dezelfde machine te hebben als een andere lokale service, gewoon om inhoud van die service te leveren. ASP. NET-web-API's gebruiken bijvoorbeeld een interne webserver genaamd Kestrel, die goed is in het reageren op verzoeken, maar niet veel anders. Het is heel gebruikelijk om Kestrel op een privépoort te draaien en NGINX te gebruiken als een configureerbare reverse proxy.
Gecentraliseerde logging
Deze is vrij eenvoudig, maar als het meeste van je verkeer via één service gaat, is het gemakkelijk om logboeken te controleren. Het toegangslogboek van NGINX bevat veel nuttige informatie over uw verkeer, en hoewel het de functies van een service als Google Analytics niet overtreft, is het geweldige informatie om te hebben.