Skip to main content

Nginx Proxy Manager

Nginx Proxy Manager (NPM) is a web-based interface for managing reverse proxies using Nginx. It allows you to define domains, route traffic to internal services, and manage SSL certificates without editing configuration files manually. It is well suited for homelabs and small self-hosted environments.

Personal Experience

In practice, Nginx Proxy Manager has proven to be extremely reliable. It has been running for a long time on a small but solid Orbsmart mini PC, without requiring attention. The system was set up once and has been operating smoothly ever since. It updates itself automatically, restarts weekly, and creates regular backups via Restic and rclone (WebDAV) to a NAS. This setup has shown that even modest hardware is sufficient for a stable and low-maintenance reverse proxy solution.

Features

  • Web interface for reverse proxy configuration
  • Automatic Let’s Encrypt SSL certificates
  • HTTP → HTTPS redirection
  • Basic access control
  • Multiple domains and hosts
  • TCP/UDP forwarding
  • Certificate management

Installation with Docker

Requirements:

  • Linux system or VM
  • Docker and Docker Compose installed
  • Ports 80, 443 and 81 available

Folder setup:

mkdir -p /opt/nginx-proxy-manager/data
mkdir -p /opt/nginx-proxy-manager/letsencrypt
cd /opt/nginx-proxy-manager

Create docker-compose.yml:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: always
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Start:

docker compose up -d

Web interface:

http://<server-ip>:81

First Login

Default credentials:

Email: admin@example.com Password: changeme

You will be asked to set a new email and password.

Add a Proxy Host

  1. Open the web interface
  2. Go to “Proxy Hosts”
  3. Add a new host
  4. Enter domain, target IP and port
  5. Enable WebSockets if needed
  6. Save

SSL Certificates

  1. Edit the proxy host
  2. Select SSL
  3. Request a Let’s Encrypt certificate
  4. Enable Force SSL and HTTP/2

Certificates renew automatically.

Updating

cd /opt/nginx-proxy-manager
docker compose pull
docker compose up -d

Backup

Back up the following folders:

  • /opt/nginx-proxy-manager/data
  • /opt/nginx-proxy-manager/letsencrypt

These contain configuration and certificates.

Common Issues

Port conflicts: ports 80 and 443 must be free Let’s Encrypt errors: DNS not pointing to server or ports not forwarded Admin UI unreachable: firewall or container not running