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:

app1.voorbeeld.nl → localhost:3000
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:

server {
  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;
  }
}

Zie ook