Wat is een reverse proxy en wanneer gebruik je het?
Een reverse proxy is een server die tussen de gebruiker en je applicatie zit. De gebruiker communiceert met de proxy, en de proxy stuurt het verzoek door naar de juiste applicatie. Voor de gebruiker is de proxy onzichtbaar.
Proxy vs reverse proxy
Een gewone (forward) proxy staat aan de kant van de client: de browser stuurt verzoeken via de proxy naar het internet. Een reverse proxy staat aan de kant van de server: de proxy ontvangt verzoeken van buiten en stuurt ze door naar een of meerdere servers achter zich.
Waarvoor gebruik je een reverse proxy?
SSL beëindigen
De reverse proxy regelt de HTTPS-verbinding met de browser. De applicatie zelf hoeft niets van SSL te weten en communiceert gewoon via HTTP met de proxy. Dit heet SSL termination.
Meerdere applicaties op één server
Op poort 80 en 443 kan maar één proces luisteren. Met een reverse proxy kun je op basis van het domein of pad doorsturen naar verschillende applicaties op interne poorten:
app2.voorbeeld.nl → localhost:4000
voorbeeld.nl/api → localhost:8080
Load balancing
De proxy verdeelt inkomende verzoeken over meerdere servers of processen. Als één server overbelast is of uitvalt, neemt een andere het over.
Caching
De proxy kan antwoorden tijdelijk bewaren en hergebruiken, zodat de applicatieserver minder belast wordt.
Beveiliging
De applicatieserver is niet direct bereikbaar vanaf internet. Alleen de proxy is publiek zichtbaar. Je kunt op de proxy ook rate limiting of andere bescherming instellen.
Nginx als reverse proxy
Nginx is een veelgebruikte reverse proxy. Een eenvoudige configuratie om verkeer door te sturen naar een applicatie op poort 3000:
listen 80;
server_name voorbeeld.nl;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}