−25%

op Windows bij jaarbetaling, tot 31/10. Naar de pakketten

EQVPS
Aan de slag

Een nginx-reverseproxy met HTTPS opzetten

Zet een net domein en automatische HTTPS voor elke app die op een lokale poort luistert. Twee wegen: nginx met Certbot, of Caddy voor automatische TLS in één regel. Stap voor stap, met kant-en-klare configuratie.

De meeste zelf-gehoste apps luisteren op een lokale poort zoals 127.0.0.1:3000 en spreken gewoon HTTP. Een reverseproxy staat ervoor op poort 80/443, sluit HTTPS af met een echt certificaat en stuurt verkeer door naar die lokale poort — hij geeft je een net https://app.yourdomain.com en laat je meerdere apps achter één IP draaien. Hier zijn de twee gangbare wegen.

Vereisten

  • Een domein met een A-record dat naar het IP van je server wijst (wacht op DNS-propagatie).
  • Poort 80 en 443 open — zie hoe je een UFW-firewall instelt.
  • Je app draait lokaal, bijvoorbeeld op 127.0.0.1:3000.

Optie A — Caddy (automatische HTTPS, één regel)

sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy

Dat is alles — Caddy haalt een Let's Encrypt-certificaat voor het domein en vernieuwt het automatisch.

Optie B — nginx + Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

Maak /etc/nginx/sites-available/app:

server {
    listen 80;
    server_name app.yourdomain.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;
    }
}

Schakel het in en voeg HTTPS toe:

sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com

Certbot past de configuratie aan om HTTPS te serveren en stelt automatische vernieuwing in.

Eerlijke waarschuwingen

  • DNS en poorten zijn de gebruikelijke oorzaken van falen. Het A-record moet hierheen wijzen en gepropageerd zijn, en 80/443 bereikbaar, anders mislukt de certificaatuitgifte. Beide tools proberen het opnieuw zodra dat is opgelost.
  • Stel alleen bloot wat je bedoelt. Houd de app gebonden aan 127.0.0.1, zodat hij alleen via de proxy bereikbaar is, niet rechtstreeks.
  • HTTPS heeft een domein nodig, geen kaal IP — Let's Encrypt geeft uit voor namen.

Volgende stappen

De reverseproxy is precies wat één server veel dingen laat serveren — zie meerdere diensten achter één IP zelf hosten. Draai je de app in een container? Begin met hoe je Docker installeert. Om de app zelf herstarts en crashes te laten overleven, zie hoe je een systemd-service maakt.

Een domein naar je VPS laten wijzen (A, AAAA en www) →

FAQ

Wat is een reverseproxy en waarom heb ik er een nodig?

Je app luistert meestal op een lokale poort zoals 127.0.0.1:3000. De reverseproxy staat ervoor op poort 80/443, sluit HTTPS af en stuurt verzoeken door naar die lokale poort. Hij geeft je een net domein, een geldig TLS-certificaat en de mogelijkheid meerdere apps achter één IP te draaien — zonder dat de app dat allemaal zelf hoeft te doen.

nginx of Caddy — wat kies ik?

Caddy is de snelste weg: het haalt en vernieuwt Let's Encrypt-certificaten automatisch, en een werkende HTTPS-proxy is één regel config. nginx is bekender en flexibeler, maar voor TLS voeg je Certbot toe. Wil je HTTPS met zo min mogelijk gedoe, gebruik Caddy; ken je nginx al of wil je de functies ervan, gebruik nginx.

Heb ik een domein nodig?

Voor een vertrouwd HTTPS-certificaat wel — Let's Encrypt geeft certificaten uit voor domeinnamen, niet voor kale IP's. Wijs een A-record naar het IP van je server, wacht op DNS-propagatie, en de proxy kan een certificaat voor die naam halen.

Welke poorten moeten open staan?

80 en 443 inkomend. Poort 80 wordt gebruikt voor de eerste certificaatuitdaging en de omleiding naar HTTPS; 443 serveert het versleutelde verkeer. Open beide in je firewall (zie de UFW-gids) en zorg dat niets anders ze al bezet.

Waarom mislukt de certificaatuitgifte?

Bijna altijd DNS of poorten. Het A-record van het domein moet naar deze server wijzen en gepropageerd zijn, en poort 80/443 moeten bereikbaar zijn (open in de firewall, niet stroomopwaarts geblokkeerd). Herstel die twee en de uitgifte lukt; zowel Caddy als Certbot proberen het opnieuw.

Reacties

Nog geen reacties. Wees de eerste.

Laat een reactie achter

Reacties worden gemodereerd voordat ze verschijnen.