Command Palette

Search for a command to run...

Blog
PreviousNext

Secure Services with Nginx Proxy Manager

Set up Nginx Proxy Manager as a reverse proxy to route traffic, enable HTTPS, and manage multiple services easily.

Introduction

Running multiple services on your homelab can quickly become overwhelming. Each app listens on a different port, you have to manage SSL certificates, and routing rules are scattered all over the place.

That’s where Nginx Proxy Manager (NPM) comes in.
It provides:

  • A simple web UI for managing reverse proxies.
  • Automatic SSL certificates via Let’s Encrypt.
  • Centralized control of all your services.

If you want to expose apps securely without editing endless configuration files, NPM is an excellent starting point.

Quick Installation

Create a docker compose file

docker-compose.yml
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
 
    #environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"
 
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
 
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Bring it up

docker compose up -d

Log in for the first time

Default Credentials

EmailPassword
[email protected]changeme

Adding Services

Create a Proxy Host

In the NPM dashboard, go to Hosts → Proxy Hosts → Add Proxy Host.

  • Enter your domain (e.g., grafana.local).
  • Set the forwarding IP/hostname and port (e.g., 192.168.x.x:8080).
  • Enable Block Common Exploits.

Enable SSL

Open the proxy host’s SSL tab.

  • Choose Request a new SSL certificate.
  • Tick Force SSL and HTTP/2 Support.
  • NPM will automatically fetch and renew certificates via Let’s Encrypt.

Repeat for other apps

Add more services (Nextcloud, Portainer, Jellyfin, etc.) following the same steps. Each will be accessible at its own domain with HTTPS enabled.

Conclusion

With Nginx Proxy Manager, you’ve turned a messy collection of services into a unified, secure setup:

  • All apps accessible via clean domain names.
  • Automatic HTTPS without manual certificate handling.
  • A simple UI that saves you from editing config files.

For small homelabs and self-hosted projects, NPM strikes the perfect balance between ease of use and functionality.