nginx reverse proxy: handleiding
Op deze pagina
Een reverse proxy staat vóór je applicaties en geeft de verzoeken van bezoekers aan ze door. Met nginx ervoor wordt een Node.js-app, een Docker-container of een dashboard dat op een of andere poort draait gewoon https://app.example.com, met HTTPS, de juiste headers en één plek om alles te beheren.
Deze handleiding zet nginx stap voor stap op als reverse proxy op Ubuntu: het server block, de headers, WebSockets, gratis HTTPS en de fouten die je het vaakst tegenkomt.
Wat een reverse proxy doet
- Eén publiek toegangspunt. nginx luistert op poort 80 en 443 en stuurt elk domein of pad door naar de juiste app, zodat de apps zelf nooit rechtstreeks aan het internet hangen.
- HTTPS op één plek. nginx regelt de certificaten; de apps erachter kunnen gewoon HTTP praten op localhost.
- Meerdere apps op één server.
app.example.com,api.example.comenexample.com/blogkunnen elk naar een andere dienst gaan. - Extra's: compressie, caching, uploadlimieten en toegangsregels, zonder de app aan te raken.
Stap 1: nginx installeren
sudo apt update sudo apt install nginx
Open http://your-server-ip en je zou de welkomstpagina van nginx moeten zien. Gebruik je ufw, sta webverkeer dan toe met sudo ufw allow 'Nginx Full'.
Controleer of je app draait en op de server zelf bereikbaar is, bijvoorbeeld met curl http://127.0.0.1:3000. Als dat mislukt, mislukt nginx ook.
Draai nginx en je apps met volledige root-toegang: HytHost KVM VPS-pakketten vanaf €2.92/mnd.
VPS-pakketten bekijkenStap 2: het proxy server block aanmaken
Op Ubuntu krijgt elke site een bestand in /etc/nginx/sites-available/, dat je activeert met een link in sites-enabled. Maak /etc/nginx/sites-available/app.example.com aan:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
Activeer het, test de configuratie en herlaad:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
Laat het A-record van het domein naar je server wijzen en http://app.example.com toont nu je app. Draai altijd nginx -t voordat je herlaadt: zo vang je typefouten af voordat ze de site platleggen.
De headers, en de slash aan het eind
Hostgeeft het domein door dat de bezoeker opvroeg. Zonder deze header stuurt nginx het adres uitproxy_pass, en apps die links opbouwen vanuit de host gaan stuk.X-Real-IPenX-Forwarded-Forgeven het IP-adres van de bezoeker door. Zonder deze headers lijkt elk verzoek van127.0.0.1te komen.X-Forwarded-Protovertelt de app of de bezoeker HTTPS gebruikte, zodat die niet in een redirect-lus belandt.
Het nginx-pakket van Ubuntu levert deze regels mee in /etc/nginx/proxy_params, dus include proxy_params; is een handige snelkoppeling.
De slash aan het eind maakt uit. Voor een app onder een pad:
location /app/ {
proxy_pass http://127.0.0.1:3000/;
}
Met de slash na de poort komt /app/login bij de app aan als /login. Zonder slash krijgt de app het volledige /app/login.
WebSockets
Chat-apps, live dashboards en veel beheerpanelen gebruiken WebSockets, die twee extra headers nodig hebben. Voeg deze map één keer toe, binnen het http-blok, bijvoorbeeld in een nieuw bestand /etc/nginx/conf.d/websocket.conf:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Daarna in de location:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_read_timeout 1h;
nginx sluit een geproxiede verbinding die 60 seconden niets verstuurt; de langere proxy_read_timeout houdt stille WebSockets open. proxy_http_version 1.1 is pas de standaard vanaf nginx 1.29.7, en Ubuntu 24.04 levert 1.24, dus laat de regel staan.
Stap 3: gratis HTTPS met Certbot
sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/local/bin/certbot sudo certbot --nginx -d app.example.com
Certbot haalt een gratis Let's Encrypt-certificaat op, voegt de HTTPS-instellingen toe aan je server block en kan HTTP naar HTTPS doorsturen. Het certificaat wordt automatisch verlengd; controleer dat met sudo certbot renew --dry-run. Meer over certificaten in zo krijg je een gratis SSL-certificaat.
502-, 504- en 413-fouten oplossen
| Fout | Gebruikelijke oorzaak | Oplossing |
|---|---|---|
| 502 Bad Gateway | nginx kan de app niet bereiken: die is gestopt, gecrasht of luistert op een andere poort of een ander adres | Start de app, controleer de poort met curl http://127.0.0.1:PORT, lees /var/log/nginx/error.log |
| 504 Gateway Timeout | De app deed er langer dan 60 seconden over om te antwoorden | Maak het verzoek sneller, of verhoog proxy_read_timeout voor die location |
| 413 Request Entity Too Large | Een upload is groter dan de standaardlimiet van nginx van 1 MB | Zet client_max_body_size 50m; in het server block |
| Redirect-lus | De app weet niet dat de bezoeker HTTPS gebruikte | Geef X-Forwarded-Proto door en vertel de app dat hij achter een proxy draait |
Na elke wijziging: sudo nginx -t, daarna sudo systemctl reload nginx.
Draai het op een HytHost VPS
Een reverse proxy heeft een server nodig waarop jij poort 80 en 443 in handen hebt. HytHost VPS-pakketten draaien op KVM met volledige root-toegang, SSD-opslag en DDoS-bescherming; kies Ubuntu 24.04 en volg de stappen hierboven. Draai je je apps in containers? Zet dan eerst Docker op met zo installeer je Docker op Ubuntu, en bind de poorten van de containers aan 127.0.0.1, zodat alleen nginx ze kan bereiken.
Veelgestelde vragen
Een reverse proxy stuurt verzoeken door naar een of meer apps erachter. Een load balancer is een reverse proxy die verzoeken verdeelt over meerdere kopieën van dezelfde app. nginx kan allebei, met een upstream-blok dat de kopieën opsomt.
nginx kan de app erachter niet bereiken. Controleer of de app draait en luistert op het adres en de poort uit proxy_pass, en lees /var/log/nginx/error.log voor de precieze reden.
Nee, als de app op dezelfde server draait. nginx regelt HTTPS voor bezoekers en praat met de app via gewoon HTTP op 127.0.0.1, dat de machine nooit verlaat.
Geef elke app een eigen server block met een eigen server_name, zoals app.example.com en api.example.com, elk met een proxy_pass naar een andere poort.
Ja. Publiceer de poort van elke container alleen op 127.0.0.1 en laat proxy_pass daarnaar wijzen. Zo blijven de containers van het publieke internet af, en dat is belangrijk omdat door Docker gepubliceerde poorten ufw omzeilen.
Host je apps achter nginx
HytHost KVM VPS-pakketten met volledige root-toegang, SSD-opslag en DDoS-bescherming vanaf €2.92/mnd.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursWas deze gids nuttig?