Nginx Proxy Manager Setup: Reverse Proxy with HTTPS for Homelab Services

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 container
  • plex.yourdomain.com → Plex Media Server
  • nextcloud.yourdomain.com → Nextcloud container
  • homeassistant.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 data folder 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.

Leave a Comment