Ga naar hoofdinhoud
50% korting alle plannen, beperkte tijd. Vanaf $2.48/mo
14 min left
Web- en zakelijke apps

Nginx Proxy Manager op een VPS: een review en installatiehandleiding

C Door Chike 14 min leestijd
Nginx Proxy Manager on a VPS routing one public IP to Dashboard, Media Server, Database, and Blog containers over HTTPS

Je hebt een VPS met vijf of zes Docker-services erop: Nextcloud, Uptime Kuma, een Ghost-blog, misschien een Vaultwarden. Eén publiek IP. En je wilt elke service op een eigen subdomein met HTTPS, zonder telkens handmatig Nginx-configuratiebestanden te bewerken als je een container toevoegt. Dat is precies het probleem dat Nginx Proxy Manager oplost.

Dit is een review en een volledige Nginx Proxy Manager VPS-installatie in één handleiding. Nginx Proxy Manager (NPM) is een Docker-app die Nginx in een web-UI verpakt: je verwijst subdomeinen naar backendcontainers en vraagt Let's Encrypt-certificaten aan via een dashboard in plaats van handmatig directives te schrijven. De handleiding is voor self-hosters en sysadmins die al Docker draaien en nu een reverse proxy nodig hebben zonder aan te hoeven raken nginx.conf.

Aan het einde weet je of NPM bij jouw situatie past, heb je het draaiend met HTTPS op je VPS, en ken je de criteria om over te stappen op Caddy of Traefik wanneer NPM niet langer de juiste tool is.

De korte versie

  • Wat NPM is: een Docker-app die een web-UI bovenop Nginx plaatst voor het beheren van proxyhosts en automatische Let's Encrypt-HTTPS. Het past bij mensen die een GUI willen en een kleine, redelijk statische stack aan services draaien.
  • De afwegingen: de configuratie zit in een SQLite-database, dus is niet versiebeheerbaar of te diffen zoals een configuratiebestand. Op 12 juli 2026 is de nieuwste getagde release getroffen door CVE-2026-40519, dus nieuwe implementaties zouden moeten wachten op een getagde release die de fix bevat. Het adminpaneel op poort 81 is het belangrijkste dat je moet afschermen.
  • Capaciteit: NPM zelf gebruikt in rust ongeveer 50 MB RAM. Een VPS van 1 GB is de praktische ondergrens; 2 GB is comfortabel zodra je de services erachter toevoegt.
  • Wanneer overstappen: blijf bij NPM voor een kleine, grotendeels statische stack waarbij een GUI belangrijk is. Gebruik Caddy als je configuratie als code en een kleinere footprint wilt. Gebruik Traefik wanneer frequente containerwijzigingen Docker-auto-discovery waardevoller maken dan handmatige hostregistratie.

Wat deze gids niet behandelt

Dit is een VPS-implementatiehandleiding, geen naslagwerk. Om het gericht te houden, valt het volgende buiten de scope:

  • Diepgaande aanpassing van Nginx-directives (aangepaste location-blokken buiten wat de NPM-UI biedt).
  • Load-balancingarchitectuur op schaal.
  • Vergelijking van Kubernetes-ingress.
  • NPM op Windows.
  • De Cloudflare Tunnel-route voor opzetten zonder een statisch IP.

Wat Nginx Proxy Manager doet (en waar het je bijt)

Nginx Proxy Manager taking one public IP and routing subdomains such as app, status, cloud, and vault.example.com to separate backend containers, each with SSL enabled

Nginx Proxy Manager is een Docker-applicatie die Nginx eronder draait en er een webdashboard bovenop plaatst. Je maakt proxyhosts aan (subdomein naar backendcontainer en poort) en vraagt Let's Encrypt-certificaten aan via formulieren in plaats van configuratiebestanden. Het past bij een kleine, redelijk statische stack aan zelfgehoste apps op één VPS.

Naast de basis regelt het dashboard ook toegangslijsten en het doorsturen van ruwe TCP/UDP-streams. Voor een stack aan apps op één VPS is dat een echt gemak: je voegt een container toe, opent het dashboard, wijst er een subdomein aan toe en klikt om een certificaat uit te geven. Klaar.

De belangrijkste afweging is dat de gezaghebbende configuratie van NPM standaard in een SQLite-database zit. NPM genereert wel leesbare Nginx-bestanden onder /data/nginx/proxy_host/, maar die bestanden zijn gegenereerde artefacten en niet de declaratieve configuratie die je bewerkt en onder versiebeheer plaatst. Je kunt ze inspecteren, maar ze zijn geen schone vervanging voor een Caddyfile of Traefik-labels, en de betrouwbare manier om de implementatie te reproduceren is het herstellen van de NPM-data- en certificaatvolumes. Voor een kleine statische stack kan dat aanvaardbaar zijn. Voor een Git-gedreven infrastructuurworkflow is het een echte beperking.

Op 12 juli 2026 is de nieuwste getagde release v2.15.1, gepubliceerd op 3 juni 2026. Het project blijft actief en MIT-gelicentieerd, maar de huidige beveiligingspositie vereist een belangrijke kanttekening: NVD vermeldt de versies 2.9.14 tot en met 2.15.1 als getroffen door CVE-2026-40519, een geauthenticeerde command-injection-kwetsbaarheid die is gefixt in commit a5db5ed maar nog niet is opgenomen in een nieuwere getagde release. Controleer voor het implementeren de releasepagina en gebruik de eerste getagde versie die die fix bevat. NPM wordt onderhouden, maar v2.15.1 zou op dit moment niet als volledig gepatcht beschreven moeten worden.

Wat de footprint betreft, gebruikt NPM in rust ongeveer 50 MB RAM volgens de reverse-proxyvergelijking van byte-guard. Dat is licht genoeg dat NPM bijna nooit datgene is wat je VPS belast. De services erachter wel.

Mijn mening: NPM is een redelijke keuze in 2026 als je een GUI wilt en een kleine Docker-stack draait. Als je in versiebeheer leeft en je proxyconfiguratie in Git wilt, kijk dan naar Caddy. De op SQLite gebaseerde configuratie is de doorslaggevende factor, niet iets wat mis is met de proxying zelf.

NPM ruilt overdraagbaarheid van de configuratie in voor een GUI. Die ruil is prima voor een kleine statische stack en vervelend voor een Git-gedreven workflow.

NPM vs Caddy vs Traefik: welke reverse proxy past bij je VPS

NPM, Caddy, and Traefik compared: NPM is a GUI for small static stacks at about 50 MB idle, Caddy is config-as-code for simple deployments at about 30 MB, and Traefik uses Docker auto-discovery for changing containers at about 80 MB

De drie tools verschillen op vier assen die de keuze bepalen: hoe je ze configureert, hoe ze HTTPS afhandelen, hoe ze schalen met het aantal services en hoeveel RAM ze in rust gebruiken. Hier is de vergelijking.

KenmerkNginx Proxy ManagerCaddyTraefik
ConfiguratiemodelWeb-GUI, opgeslagen in SQLiteCaddyfile (tekst, versiebeheerbaar)Docker-labels / YAML
Auto-HTTPSJa, per host aanvragen in de UIJa, standaard, zonder configuratieJa, vereist ACME-resolverconfiguratie
Docker-auto-discoveryNoNoJa, via containerlabels
RAM in rust~50 MB~30 MB~80 MB
Beste toepassingGUI-gebruikers, kleine/statische stacksConfiguratie als code, kleinste footprintDynamische Docker-stacks met frequente containerwijzigingen

De cijfers voor RAM in rust zijn benaderende waarnemingen uit één vergelijking uit 2026, geen vaste vereisten. Het werkelijke gebruik varieert per imageversie, ingeschakelde functies, verkeer en logging.

De criteria om over te stappen volgen rechtstreeks uit die tabel. Als je een dashboard wilt en een handvol services draait die niet vaak veranderen, is NPM de juiste tool. Als je de voorkeur geeft aan configuratie als code, de kleinste footprint wilt, of Caddy's automatische HTTPS-provisioning en -verlenging zonder ACME-configuratie, gebruik dan Caddy. Ik grijp zelf naar Caddy bij single-site-implementaties omdat de SSL-afhandeling automatisch is en de Caddyfile kort is. Als je vaak containers toevoegt, verwijdert of opnieuw implementeert, betekent de op labels gebaseerde auto-discovery van Traefik dat je niet langer elke nieuwe host handmatig hoeft te registreren.

Er is ook kaal Nginx met Certbot, waar sommige beheerders de voorkeur aan geven voor precieze controle of niet-Docker-implementaties. Certbot kan certificaatverlenging automatiseren, maar je beheert de virtualhostroutering en Nginx-configuratie nog steeds zelf. Als je belangrijkste reden om NPM te overwegen het vermijden van handmatige proxyconfiguratie is, is kaal Nginx waarschijnlijk niet de betere keuze.

Een kanttekening bij de keuze: de vergelijking van byte-guard komt uit op Caddy als de lichtste optie in die vergelijking, en voor een verse single-host-opzet in 2026 is dat een redelijke keuze. Caddy wint doordat het lichter is dan NPM, maar als je specifiek een GUI wilt, is het niet je beste keuze.

Voor een diepere vergelijking van de onderliggende engines, zie de vergelijking van Caddy vs Nginx op een VPS.

Vereisten: wat je nodig hebt

Zorg dat je deze zaken klaar hebt voordat je implementeert. Dit is een korte lijst, maar sla je een item over, dan mislukt de certificaatstap later.

  • Een VPS met Docker en Docker Compose geïnstalleerd (Ubuntu 22.04 LTS of Debian 12 is prima).
  • Een domeinnaam, met een DNS A-record (en AAAA als je IPv6 gebruikt) dat naar het publieke IP van je VPS verwijst.
  • SSH-toegang tot de VPS.
  • Poort 80 en 443 open naar het internet op je firewall.
  • Poort 81 alleen door jou bereikbaar, niet open voor het publiek (behandeld in de beveiligingssectie).

Nginx Proxy Manager op je VPS instellen met Docker Compose

Deploying Nginx Proxy Manager with Docker Compose: ports 80 and 443 public, the admin UI on port 81 bound to 127.0.0.1, and backend containers joined to a shared proxy Docker network

Deze sectie implementeert NPM met Docker Compose. Zodra je DNS-records naar de VPS resolven, is de containeropzet zelf snel, hoewel DNS-propagatie en certificaatuitgifte langer kunnen duren.

De opzet gebruikt één Docker Compose-bestand en een eenmalig commando om een gedeeld Docker-netwerk aan te maken. Maak een map aan, maak het netwerk aan, voeg het onderstaande docker-compose.yml bestand toe en start de container.

Maak eerst het gedeelde Docker-netwerk aan:

docker network create proxy

Maak vervolgens het volgende docker-compose.yml bestand:

# docker-compose.yml
services:
  npm:
    image: 'jc21/nginx-proxy-manager:<PATCHED_VERSION>'
    restart: unless-stopped
    ports:
      - '80:80'                 # public HTTP
      - '443:443'               # public HTTPS
      - '127.0.0.1:81:81'       # admin UI, reachable only from the VPS itself
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy
networks:
  proxy:
    external: true

Koppel elke backendcontainer die NPM op servicenaam moet bereiken aan hetzelfde externe proxy netwerk. Zo kan NPM de container op zijn servicenaam resolven zonder de poort van de backendapplicatie op de VPS te publiceren.

Maak van beide een back-up, ./data en ./letsencrypt vóór upgrades. De datamap bevat de database en gegenereerde configuratie van NPM, terwijl de Let's Encrypt-map het certificaatmateriaal bevat.

Een paar dingen over dit bestand. De image gebruikt standaard een SQLite-database die is opgeslagen in het ./data volume. Dat is de standaardbackend en die is juist voor de meeste single-VPS-implementaties. Als je een externe database nodig hebt, ondersteunt NPM MariaDB/MySQL en PostgreSQL, wat betekent dat je een databaseservice en de bijbehorende omgevingsvariabelen toevoegt. Voor één VPS is SQLite nog steeds de eenvoudigste standaard, tenzij je een duidelijke reden hebt om de database uit het datavolume te halen. Het restart: unless-stopped beleid betekent dat NPM weer opstart als de VPS herstart, wat je wilt voor een service die vóór al het andere staat.

Start het en bevestig dat het draait:

docker compose up -d
docker compose ps

Verwachte uitvoer: de npm container met status Up, poort 80 en 443 publiek gemapt, en poort 81 alleen gebonden aan 127.0.0.1. De eerste start duurt een paar minuten terwijl NPM een JWT-sleutel genereert, de database initialiseert en de standaard admin-gebruiker aanmaakt. De officiële installatiedocumentatie beschrijft deze eerste-startsequentie.

Maak een SSH-tunnel vanaf je lokale computer voordat je de beheerinterface opent:

ssh -L 8181:127.0.0.1:81 user@your-vps

Open vervolgens http://127.0.0.1:8181 in je browser. Log bij een verse installatie in met [email protected] en changeme, vervang vervolgens direct het standaard e-mailadres en wachtwoord. Maak het dashboard niet publiek bereikbaar zolang de standaardinloggegevens actief zijn.

Zodra je de admininloggegevens hebt gewijzigd, voeg je je eerste proxyhost toe:

  1. Ga in het dashboard naar Hosts, dan Proxy Hosts, dan Add Proxy Host.
  2. Stel in Domain Name op je subdomein (bijvoorbeeld cloud.example.com).
  3. Instellen Forward Hostname / IP op de naam of het IP van de backendcontainer, en Forward Port op de poort waarop deze luistert.
  4. Opslaan. De proxyhost verschijnt in de lijst en verkeer naar dat subdomein bereikt nu je container.

Als je hiernaast een Docker-beheer-UI draait, geldt hetzelfde patroon: verwijs op dezelfde manier een subdomein naar de containerbeheertool en doe hetzelfde voor een monitoringstack van Prometheus en Grafana die je achter de proxy wilt plaatsen.

Automatische HTTPS configureren voor een subdomein

Configuring automatic HTTPS in Nginx Proxy Manager: a DNS A record points the subdomain at the VPS, Let's Encrypt validates ownership over HTTP-01 on port 80 or DNS-01 for wildcards, and the certificate installs with Force SSL and HTTP/2 enabled

Deze sectie levert je een geldig, automatisch verlengend Let's Encrypt-certificaat voor je subdomein. De vereiste waar mensen op stuklopen: het DNS A-record voor dat subdomein moet al naar je VPS verwijzen en poort 80 moet bereikbaar zijn vanaf het internet, omdat Let's Encrypt het domein verifieert door er verbinding mee te maken.

Nu de proxyhost is aangemaakt, vraag je het certificaat aan:

  1. Bewerk de proxyhost, open het SSL tabblad.
  2. Onder SSL-certificaatkies Request a new SSL Certificate.
  3. Inschakelen Force SSL en HTTP/2 Support. Schakel HSTS pas in nadat je hebt bevestigd dat HTTPS correct werkt, omdat browsers het beleid kunnen cachen en herstel van een fout in het certificaat of de proxyconfiguratie moeilijker kunnen maken.
  4. Ga akkoord met de Let's Encrypt-voorwaarden en sla op.

Standaard gebruikt NPM de HTTP-01-challenge voor niet-wildcardnamen, waarbij elke aangevraagde hostnaam via poort 80 wordt gevalideerd. Een certificaat kan meerdere niet-wildcardnamen bevatten, maar HTTP-01 kan geen wildcardcertificaten uitgeven. Wildcardnamen zoals *.example.com vereisen de DNS-01-challenge met een ondersteunde DNS-provider. Voor een normale opzet met één subdomein per service is HTTP-01 alles wat je nodig hebt en verlopen verlengingen automatisch.

Als de certificaataanvraag mislukt, controleer dan eerst poort 80. Veelvoorkomende oorzaken zijn een onbereikbare poort 80, een onjuiste cloudfirewall- of security-group-regel, en DNS die nog niet volledig is gepropageerd. Let's Encrypt kan een domein dat het niet kan bereiken niet valideren.

Het NPM-adminpaneel beveiligen op een VPS

Securing the Nginx Proxy Manager admin panel: public access to port 81 is blocked while admin access is allowed only through an SSH tunnel or private VPN to 127.0.0.1:81, with two-factor authentication and a patched version

De beheerinterface op poort 81 is de grootste blootstelling bij een NPM-implementatie, en deze sectie schermt die af. Dit is operationele hardening, geen beveiligingsaudit: drie dingen, één keer gedaan, en het risicoprofiel daalt sterk.

Ten eerste, en het belangrijkst, houd poort 81 gebonden aan 127.0.0.1 zoals getoond in het Docker Compose-bestand. Bereik het dashboard via de eerder beschreven SSH-tunnel. Als je permanente toegang op afstand nodig hebt, maak de beheerinterface dan alleen bereikbaar via een private VPN. Publiceer poort 81 niet op het publieke IP van de VPS.

Ten tweede, schakel TOTP-tweefactorauthenticatie in op je admin-account. NPM voegde op TOTP gebaseerde 2FA toe in versie 2.13.6, dus elke huidige installatie heeft het. Schakel het in.

Ten derde, houd NPM gepatcht en verifieer de exacte release in plaats van aan te nemen dat de latest tag veilig is. CVE-2026-40519 treft de versies 2.9.14 tot en met 2.15.1 en kan geauthenticeerde remote code execution mogelijk maken via kwaadaardige DNS-providergegevens. CVE-2026-50892 treft v2.14.0 en kan een geauthenticeerde aanvaller in staat stellen Let's Encrypt-privésleutelmateriaal te bemachtigen. Een eerder probleem, CVE-2025-50579, trof v2.12.3 via een CORS-fout die JWT-tokens kon blootleggen. De praktische regel is eenvoudig: houd poort 81 privé, schakel tweefactorauthenticatie in, pin een bekende gepatchte versie en verifieer de beveiligingsadviezen voordat je upgradet.

Poort 81 blijft privé en NPM blijft gepatcht. Doe die twee dingen en de belangrijkste bekende risico's worden veel beter beheersbaar voor een normale single-VPS-opzet.

Je VPS dimensioneren voor Nginx Proxy Manager

NPM zelf is licht; de dimensioneringsvraag gaat eigenlijk over NPM plus de services die erachter zitten. De footprint van de proxy in rust is zelden de beperkende factor. Een Nextcloud-instantie of Ghost-blog gebruikt meer resources dan de proxy zelf.

Zo pakken de niveaus in de praktijk uit:

  • Minimale praktische ondergrens: 1 GB RAM, 1 vCPU en 10 GB opslag. Eén dimensioneringsgids van derden gebruikt dezelfde ondergrens, maar behandel die als planningsadvies in plaats van een officiële NPM-vereiste. Het is genoeg voor NPM, het besturingssysteem en een paar lichte services, maar laat weinig speelruimte.
  • Comfortabel: 2 GB RAM, 1 vCPU, 20 GB opslag. NPM plus drie tot vijf services met ruimte om te ademen. Dit is de ideale balans voor de meeste self-hosters.
  • Een stap hoger: 4 GB RAM, 2 vCPU. Voor acht tot twaalf services, of een opzet met noemenswaardig verkeer waarbij je CPU-speelruimte wilt voor TLS-terminatie.

Het getal waarop je dimensioneert is de som van de geproxyde apps, niet NPM. Tel de RAM-footprints op van de services die je wilt draaien, tel de kleine overhead van de proxy in rust erbovenop, en kies het niveau daarboven met marge.

De server dimensioneren is het makkelijke deel. NPM draaiend krijgen betekent nog steeds de VPS provisioneren, Docker installeren, de image ophalen en die eerste-startopzet doorlopen. Als je de provisioningstappen liever overslaat, heeft de marketplace van Cloudzy een one-click Nginx Proxy Manager-implementatie op een NVMe-VPS. Het zet de container op een verse server neer, zodat je direct naar het dashboard en je eerste proxyhost gaat. Hoe dan ook, de bovenstaande dimensioneringsniveaus zijn waar je op provisioneert.

Veelgestelde vragen

Wat is het verschil tussen Nginx en Nginx Proxy Manager?

Nginx is de webserver en reverse-proxy-engine zelf, die je configureert door tekstbestanden te bewerken. Nginx Proxy Manager is een Docker-applicatie die Nginx eronder draait en er een web-UI bovenop plaatst, zodat je proxyhosts en Let's Encrypt-certificaten beheert via een dashboard in plaats van configuratiebestanden te schrijven. NPM is de GUI-laag; Nginx is de engine die het werk doet.

Is Nginx Proxy Manager in 2026 nog de moeite waard?

Ja, voor gebruikers die de voorkeur geven aan een GUI en een kleine Docker-stack draaien, maar alleen nadat je hebt geverifieerd dat de image die je implementeert de nieuwste beveiligingsfixes bevat. Op 12 juli 2026 is v2.15.1 de nieuwste getagde release, en NVD vermeldt die als getroffen door CVE-2026-40519. Als je de voorkeur geeft aan configuratie als code, blijft Caddy de betere keuze; de op SQLite gebaseerde configuratie van NPM is de belangrijkste operationele beperking.

Wat is het minimale RAM voor Nginx Proxy Manager?

NPM zelf gebruikt in rust ongeveer 50 MB RAM. Een VPS van 1 GB is een praktische ondergrens, genoeg voor NPM plus een paar lichte services. 2 GB is comfortabel zodra je meer geproxyde apps toevoegt. De echte RAM-behoefte wordt bepaald door de services achter NPM, niet door NPM zelf.

Moet ik poort 81 blootstellen aan het internet?

Nee. Houd poort 81 gebonden aan localhost en benader die via een SSH-tunnel, of maak hem alleen bereikbaar via een private VPN. Publiceer de beheerinterface niet op het publieke IP van de VPS.

Kan ik Nginx Proxy Manager zonder Docker draaien?

Nee. NPM wordt gedistribueerd en ontworpen als een Docker-container, en er is geen ondersteunde niet-Docker-installatie. Als je Docker niet kunt of wilt draaien, gebruik dan in plaats daarvan kaal Nginx met Certbot, of Caddy als één binary.

Ondersteunt Nginx Proxy Manager wildcardcertificaten?

Ja, via een DNS-01-challenge met een geconfigureerde ondersteunde DNS-provider. Standaardcertificaten voor één hostnaam gebruiken de HTTP-01-challenge via poort 80; wildcardcertificaten (*.example.com) vereisen DNS-01 omdat de certificaatautoriteit controle valideert door een DNS-record te schrijven in plaats van één host te bereiken.

Delen

Meer van de blog

Blijf lezen.

Klaar om uit te rollen? Vanaf $2,48/mnd.

Onafhankelijke cloud, sinds 2008. AMD EPYC, NVMe, 40 Gbps. 14 dagen niet-goed-geld-terug.