Nginx Proxy Manager (NPM) is een gratis, open-source webinterface die een gebruiksvriendelijk dashboard vóór Nginx plaatst, zodat je een domein op elke zelfgehoste app kunt richten en een automatisch Let's Encrypt-certificaat krijgt zonder ooit een configuratiebestand aan te raken. Om het in te stellen draai je één klein Docker Compose-bestand, open je het beheerpaneel op poort 81, voeg je een „proxy host” toe die app.yourdomain.com koppelt aan het interne adres van een container, en vraag je het SSL met twee klikken aan. Deze gids doorloopt het volledige pad — installatie, eerste aanmelding, je eerste proxy host, gratis HTTPS en de twee fouten waarover bijna iedereen struikelt — en laat zien waar NPM de juiste tool is versus Caddy of een Cloudflare Tunnel.
Wat is Nginx Proxy Manager?
Nginx Proxy Manager is een Docker-image die Nginx en een webdashboard omhult, zodat je reverse proxies en SSL-certificaten vanuit een browser beheert in plaats van nginx.conf te bewerken. Het wordt uitgebracht onder de MIT-licentie en onderhouden door ontwikkelaar jc21; de officiële documentatie beschrijft het als een manier om „door te sturen naar je websites die thuis of elders draaien, inclusief gratis SSL, zonder al te veel over Nginx of Let's Encrypt te hoeven weten”. Het verzorgt domeindoorsturing, redirects, 404-hosts en ruwe TCP/UDP-streams, geeft gratis certificaten uit via Let's Encrypt en ondersteunt toegangslijsten, HTTP-basisauthenticatie en meerdere gebruikers met een auditlog. Als je meerdere diensten op één server zelf host en elke dienst met een paar klikken een net subdomein met HTTPS wilt geven, is NPM precies daarvoor gemaakt.
Voordat je begint
Je hebt drie dingen nodig: een server met Docker en Docker Compose geïnstalleerd, een domeinnaam en DNS-records die naar het openbare IP van je server verwijzen. NPM draait overal waar Docker draait — een VPS, een thuisserver of een Raspberry Pi (amd64 en arm64 worden ondersteund; 32-bits armv7 is vervallen in de 2.14-release). Maak een A-record voor elke dienst die je wilt blootstellen, bijvoorbeeld npm.yourdomain.com en nextcloud.yourdomain.com, die beide naar hetzelfde IP verwijzen; NPM bepaalt op basis van de hostnaam waar het verkeer heen gaat. Zorg dat de poorten 80 en 443 openstaan in je firewall, zodat Let's Encrypt certificaten kan valideren en bezoekers je sites kunnen bereiken. Als je de machine nog niet hebt beveiligd, doe dat dan eerst — onze gids voor het veilige eerste uur op een VPS behandelt de firewall- en SSH-stappen die NPM als reeds gedaan veronderstelt.
Nginx Proxy Manager installeren met Docker Compose
Maak een map, zet er een docker-compose.yml in en start het. Recente versies bevatten SQLite, dus je hebt geen aparte MySQL-container meer nodig voor een basisopstelling — dit is de minimale, actuele configuratie uit de officiële installatie-instructies:
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # openbaar HTTP
- '443:443' # openbaar HTTPS
- '81:81' # beheer-UI — houd deze weg van het openbare internet
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Start het vervolgens:
docker compose up -d
De eerste start duurt een minuut of twee terwijl NPM zijn JWT-sleutels genereert, de database initialiseert en de standaardbeheerder aanmaakt. De huidige stabiele lijn is de 2.15.x-serie; het vastzetten van een versietag in plaats van latest (bijvoorbeeld jc21/nginx-proxy-manager:2.15.1) maakt upgrades weloverwogen in plaats van automatisch. De twee volumes zijn de enige staat die telt — ./data bevat je hosts en instellingen, ./letsencrypt bevat je certificaten — dus een back-up van die mappen is een back-up van je hele NPM-opstelling.
Eerste aanmelding en het beheerpaneel vergrendelen
Open http://your-server-ip:81 en meld je aan met de standaardgegevens die de documentatie meelevert: e-mail [email protected], wachtwoord changeme. NPM dwingt je meteen om een echt e-mailadres en een sterk wachtwoord in te stellen — doe dat, want poort 81 is een niet-geauthenticeerd beheeroppervlak totdat je dat doet. Verreweg de belangrijkste hardeningstap is om poort 81 nooit bloot te stellen aan het openbare internet. Bind hem aan localhost of een privé-interface, bereik hem via een VPN of een SSH-tunnel, of beperk hem met een firewallregel; als je Tailscale of een vergelijkbaar mesh gebruikt, zet de beheer-UI dan alleen op die interface. Het dashboard op een openbaar IP publiceren is de meest voorkomende NPM-fout en overhandigt een aanvaller je hele routeringstabel. De poorten 80 en 443 zijn bedoeld om naar de wereld gericht te zijn; poort 81 niet.
Je eerste proxy host toevoegen
Een proxy host is één enkele regel die een openbare hostnaam koppelt aan een interne dienst. Open in het dashboard Hosts → Proxy Hosts → Add Proxy Host en vul vier velden in: de Domain Name (nextcloud.yourdomain.com), het Scheme (http of https), de Forward Hostname/IP en de Forward Port. Het cruciale detail: de forward-hostnaam is de naam of het privé-IP van de doelcontainer zoals gezien vanuit Docker, niet localhost. Als NPM en je app een Docker-netwerk delen, gebruik dan de containernaam (nextcloud) en de interne poort (80). Schakel Block Common Exploits in en zet Websockets Support aan voor alles wat realtime is — dashboards, chat-apps, live-reload-tools — anders slagen ze er stilzwijgend niet in verbinding te maken. Sla op, en NPM schrijft de Nginx-configuratie en herlaadt die op de achtergrond. Herhaal dit één keer per dienst; elk subdomein wordt een nette, afzonderlijk beheerde vermelding in de lijst.
Gratis SSL toevoegen met Let's Encrypt
Open het tabblad SSL van de proxy host, kies Request a new SSL Certificate, vink Force SSL en HTTP/2 aan, ga akkoord met de voorwaarden van Let's Encrypt en sla op. NPM voltooit de HTTP-01-challenge van Let's Encrypt via poort 80, installeert het certificaat en vernieuwt het automatisch vóór het verloopt — geen cronjobs, geen certbot-commando's. Voor een wildcard-certificaat (*.yourdomain.com) moet je in plaats daarvan een DNS-challenge gebruiken, omdat Let's Encrypt geen wildcards uitgeeft via HTTP. Zet in het SSL-tabblad Use a DNS Challenge aan, kies je provider (Cloudflare is de gebruikelijke keuze) en plak een API-token dat is afgebakend tot het bewerken van de DNS van die zone — Cloudflares eigen gids voor API-tokens loodst je door het aanmaken van een token met Zone:DNS:Edit. Eén wildcard-certificaat dekt dan elk subdomein, zodat je niet voor elke app een nieuw certificaat uitgeeft. Dit ingebouwde, automatisch vernieuwende SSL is verreweg de grootste reden waarom mensen NPM verkiezen boven een handmatig opgezette Nginx.
Nginx Proxy Manager vs. Caddy vs. Cloudflare Tunnel
NPM is niet de enige manier om een reverse proxy met automatische HTTPS te krijgen. De juiste keuze hangt af van of je een GUI, een configuratiebestand of helemaal geen open poorten wilt.
| Tool | Configuratiestijl | Automatische HTTPS | Benodigde open poorten | Beste voor |
|---|---|---|---|---|
| Nginx Proxy Manager | Web-GUI | Ja (Let's Encrypt) | 80, 443 | Homelabs en teams die met klikken willen configureren |
| Caddy | Tekstbestand (Caddyfile) | Ja (ingebouwd) | 80, 443 | Mensen die vertrouwd zijn met de terminal en hun configuratie in Git willen |
| Cloudflare Tunnel | Cloudflare-dashboard | Ja (Cloudflare-edge) | Geen (alleen uitgaand) | Apps blootstellen achter CGNAT of zonder openbaar IP |
Kies NPM wanneer je een visueel dashboard waardeert en meer dan een paar hosts beheert. Kies Caddy als je liever een versiebeheerd configuratiebestand bijhoudt dan door een UI klikt. Grijp naar een Cloudflare Tunnel wanneer je helemaal geen inkomende poorten kunt openen — achter CGNAT, een dichtgetimmerd thuisnetwerk of een residentiële ISP. Veel zelf-hosters draaien NPM en een tunnel samen: de tunnel brengt het verkeer naar de machine, NPM routeert het naar de juiste container.
Problemen oplossen: 502 Bad Gateway en mislukte certificaten
Twee problemen zijn goed voor de meeste NPM-supportthreads. Een 502 Bad Gateway betekent vrijwel altijd dat NPM de app niet kan bereiken op het adres dat je hebt opgegeven. De oplossing is netwerken, niet NPM: de doelcontainer en NPM moeten een Docker-netwerk delen, en de forward-hostnaam moet de containernaam met de interne poort zijn — niet localhost, 127.0.0.1 of het openbare IP van de host, die geen van alle naar de juiste plek verwijzen vanuit de container van NPM. Zet beide diensten in hetzelfde externe Docker-netwerk en verwijs naar de app via de naam.
Een mislukt SSL-certificaat komt meestal neer op bereikbaarheid: de DNS van het domein moet al naar je server verwijzen, en poort 80 moet open en doorgestuurd zijn zodat Let's Encrypt de HTTP-challenge kan voltooien. Als het domein achter Cloudflares oranjewolk-proxy zit, kan de HTTP-01-challenge mislukken — zet dat record tijdens de uitgifte op DNS-only, of gebruik in plaats daarvan de DNS-challenge-methode. Ook gelden er rate limits: Let's Encrypt beperkt het aantal certificaten per domein per week, dus stop met het opnieuw proberen van een kapotte aanvraag en verhelp eerst de onderliggende oorzaak.
Veelgestelde vragen
Is Nginx Proxy Manager gratis?
Ja. Het is volledig open source onder de MIT-licentie, zonder betaald niveau of functievergrendeling. De enige kosten zijn de server waarop je het draait, en de Docker-image zelf is gratis te downloaden en commercieel te gebruiken.
Wat is de standaardaanmelding voor Nginx Proxy Manager?
Het standaardbeheerdersaccount is e-mail [email protected] met wachtwoord changeme. NPM vereist dat je beide bij de eerste aanmelding wijzigt in een echt e-mailadres en een sterk wachtwoord, en je mag de standaardwaarden nooit laten staan.
Welke poorten gebruikt Nginx Proxy Manager?
Het gebruikt poort 80 voor HTTP, poort 443 voor HTTPS en poort 81 voor het beheerdashboard. De poorten 80 en 443 moeten openbaar bereikbaar zijn; poort 81 moet privé blijven en nooit aan het internet worden blootgesteld.
Nginx Proxy Manager vs. Caddy — wat is beter?
Geen van beide is strikt beter; ze passen bij verschillende mensen. NPM geeft je een point-and-click-GUI en is eenvoudiger voor beginners en homelabs met meerdere hosts, terwijl Caddy een compacte tekstconfiguratie gebruikt die vriendelijker is voor versiebeheer en automatisering. Beide bieden automatische Let's Encrypt-HTTPS.
Waarom toont Nginx Proxy Manager 502 Bad Gateway?
Omdat het de backend-app niet kan bereiken op het geconfigureerde adres. Meestal zitten de container en NPM niet in hetzelfde Docker-netwerk, of is de forward-host ingesteld op localhost in plaats van de containernaam en de interne poort. Herstel het Docker-netwerken en de 502 verdwijnt.
Sources
- Nginx Proxy Manager — Volledige installatie-instructies — officiële Docker Compose, poorten en volumes
- Nginx Proxy Manager — Gids & functies — functielijst, beheerpoort en beschrijving
- Nginx Proxy Manager op GitHub — MIT-licentie, releases en broncode
- Let's Encrypt — de gratis certificaatautoriteit die NPM gebruikt
- Cloudflare — Een API-token maken — DNS-challenge-token voor wildcard-certificaten
Waqas Ahmed Waseer
Waqas Ahmed Waseer is ontwikkelaar en automation-builder met meer dan 8 jaar ervaring in het bouwen van productiesystemen die door 100.000+ mensen worden gebruikt. Hij bouwt custom multi-tenant SaaS, AI-automatisering (n8n, LLM-workflows, WhatsApp-bots) en hostinginfrastructuur (WHM/cPanel, CloudLinux) — en is de maker van WaSphere, FlowMaticX en het hostingmerk WaseerHost. 100+ projecten opgeleverd voor mkb, bureaus en gefinancierde startups.



