If you run multiple services in your homelab, you’ve probably faced the hassle of remembering ports like 192.168.1.10:8080 or 192.168.1.20:3000. Nginx Proxy Manager (NPM) solves this by giving every service a clean domain name, automatic HTTPS, and a single web UI to manage it all — no hand-editing config files required.
What Nginx Proxy Manager Does
NPM sits in front of your services and routes traffic based on domain names or paths. Instead of exposing app ports directly, you point all traffic to NPM on ports 80 and 443, and it forwards requests to the correct container or VM. It also handles SSL certificates automatically through Let’s Encrypt.
Prerequisites
- A server or VM running Debian/Ubuntu or Docker
- Domains or subdomains pointing to your public IP or reverse proxy
- Ports 80 and 443 open on your firewall
- Docker and Docker Compose installed
Install with Docker Compose
Create a project folder and add docker-compose.yml:
version: "3.9"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Run docker compose up -d and open http://your-server-ip:81. Default credentials are admin@example.com / changeme.
Add Your First Proxy Host
In the NPM dashboard, click Proxy Hosts → Add Proxy Host:
- Domain: home.yourdomain.com
- Forward to: internal-ip-or-container-name:port
- Block common exploits: enabled
- WebSockets: enabled if your app needs it
Save, then open the SSL tab and request a Let’s Encrypt certificate. Enable Force HTTPS and HTTP/2.
Manage Multiple Services
Repeat the proxy host step for every service:
grafana.yourdomain.com→ Grafana containerplex.yourdomain.com→ Plex Media Servernextcloud.yourdomain.com→ Nextcloud containerhomeassistant.yourdomain.com→ Home Assistant VM
Each service gets its own domain, SSL, and access rules without modifying the app itself.
Hardening and Tips
- Change the default NPM admin password immediately
- Enable two-factor authentication in NPM settings
- Use a private DNS resolver like Unbound as upstream
- Keep NPM on its own Docker network separate from app networks
- Back up the
datafolder regularly
Why This Works Better
Many guides suggest editing raw Nginx config files or using Traefik. Nginx Proxy Manager removes that complexity with a visual interface while keeping the power of Nginx underneath. It’s the fastest way to get clean URLs and HTTPS across a mixed homelab of VMs, containers, and physical servers.
Final Thoughts
Start with one or two services, then expand as you add more apps. Once your Nginx Proxy Manager setup is in place, adding new services becomes a matter of minutes instead of reconfiguring firewalls and TLS certificates manually.