If you’re running self-hosted services at home or in a homelab, chances are your setup started simple… and then slowly turned into chaos.
One service here, another one there — suddenly you’re accessing everything via random ports like:
yourip:8080yourip:32400yourip:9000
Good luck remembering what does what.
And SSL certificates? That’s usually where things really fall apart. Manually generating Let’s Encrypt certificates, editing Nginx config files, reloading services, hoping you didn’t forget a semicolon — it works, but it’s painful and time-consuming.
The good news? There’s a tool that turns all of this into a clean, visual, almost effortless experience.
It’s called Nginx Proxy Manager, and once you try it, you’ll wonder why you ever did things the hard way.
What Is Nginx Proxy Manager?
Nginx Proxy Manager (NPM) is a web-based graphical interface that sits on top of Nginx and lets you manage reverse proxy rules, SSL certificates, and access controls without touching the command line.
Instead of writing cryptic config files, you get a modern dashboard where you can:
- Route domains like
plex.yourdomain.comto Docker containers or local services - Automatically generate and renew HTTPS certificates with Let’s Encrypt
- Protect services with authentication or IP restrictions
- Manage redirects, streams, and error handling
Behind the scenes, it’s still Nginx — fast, stable, and battle-tested — but the user experience is dramatically better.
This is a reverse proxy for people who want things to work immediately, without becoming a full-time network engineer.
Installing Nginx Proxy Manager with Docker (5 Minutes Setup)
The cleanest and most popular way to run Nginx Proxy Manager is with Docker Compose.
If Docker and Docker Compose aren’t installed yet, install them first. On Debian/Ubuntu systems, that’s usually as simple as:
sudo apt install docker docker-compose
Step 1: Create the Project Directory
mkdir nginx-proxy-manager
cd nginx-proxy-manager
Step 2: Create the docker-compose.yml File
Paste the following configuration:
version: '3.8'
services:
app:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- "8080:80" # Public HTTP
- "8181:81" # Admin interface (keep private)
- "8443:443" # Public HTTPS
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: jc21/mariadb-aria:latest
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: npm
MYSQL_DATABASE: npm
MYSQL_USER: npm
MYSQL_PASSWORD: npm
volumes:
- ./mysql:/var/lib/mysql
Important Things to Check
- Port conflicts: If Apache or Nginx is already running on the host, port 80 will be in use. Stop the service or change ports.
- Check with:
netstat -tulpn | grep :80 - If you use a firewall (UFW recommended), allow the admin port:
sudo ufw allow 81
Step 3: Start the Containers
docker-compose up -d
That’s it. Nginx Proxy Manager is now running.
First Login and Basic Configuration
Open your browser and go to:
http://your-server-ip:8181
Create your admin account.

From here, exposing a service takes less than a minute:
- Click Add Proxy Host
- Enter your domain (example:
tech2geek.yourdomain.com) - Enter the internal IP and port of the service
- Open the SSL tab
- Enable Request a new SSL Certificate
- Enable Force SSL
- Save
If DNS was just configured, Let’s Encrypt may fail initially. Wait 30–60 minutes for DNS propagation and try again.

Once validated, your service is instantly available over HTTPS, with automatic certificate renewal handled for you.

Features That Actually Save You Time
Nginx Proxy Manager goes far beyond simple proxying.
Automatic SSL Certificates (Let’s Encrypt & Local)
From the Certificates section, you can manage all SSL needs in one place:
- HTTP-01 certificates – perfect for public services
- DNS-01 certificates – ideal for wildcard domains like
*.yourdomain.com - Custom/local certificates – for internal services or private CAs
Best of all, certificates renew automatically. No reminders. No downtime.
Multiple Users & Audit Logs
You can create multiple user accounts:
- Full admin access for yourself
- Limited access for collaborators or family members
Combined with Audit Logs, you always know who changed what — invaluable when something breaks unexpectedly.
Access Lists: Built-In Security
Access Lists let you define reusable security rules:
- Basic Auth (username/password)
- Allow or deny by IP address
Perfect for admin dashboards, private apps, or internal tools that should never be publicly exposed.
Create once, reuse everywhere.
Redirection Hosts (HTTP → HTTPS, Domain Changes)
Need to redirect traffic cleanly?
Examples:
yourdomain.com→www.yourdomain.comold.yourdomain.com→new.yourdomain.com- Force all HTTP traffic to HTTPS
All handled visually, no manual rewrite rules required.
Streams: Proxy TCP and UDP Services
Not everything uses HTTP.
Streams allow you to proxy TCP and UDP traffic — useful for databases, game servers, or network services. Configuration is simple and doesn’t require deep Nginx knowledge.
404 Hosts: Clean Error Handling
Define a default response for unknown domains or bot scans.
Instead of leaking information, your server responds with a clean, intentional 404 — better hygiene and fewer clues for attackers.
Advanced Nginx Configuration (Optional)
For power users, Nginx Proxy Manager allows custom Nginx directives per host:
- Custom headers
- Advanced rules
- Performance tweaks
You can start simple and gradually add complexity — without breaking everything.
Best Practices to Avoid Common Mistakes
- Never expose the admin interface publicly
Restrict port 8181 via firewall, VPN, or IP rules. - Use Access Lists for sensitive services
- Use DNS-01 challenges if you want wildcard certificates or don’t want port 80 exposed
Nginx Proxy Manager vs Traefik vs Caddy
- Traefik: Extremely powerful and dynamic, but YAML-heavy and complex for beginners
- Caddy: Clean and elegant, but still requires config files
- Nginx Proxy Manager: Visual, beginner-friendly, fast to deploy
For homelabs, personal servers, and small self-hosting setups, Nginx Proxy Manager hits the perfect balance between power and simplicity.
Final Thoughts
If you’re still manually managing Nginx virtual hosts, juggling random ports, or dreading SSL renewals, you’re making life harder than it needs to be.
Nginx Proxy Manager gives you:
- Clean URLs
- Automatic HTTPS
- Visual control
- Fewer headaches
Install it once, and enjoy your services — and your weekends — again.
And if you'd like to go a step further in supporting us, you can treat us to a virtual coffee ☕️. Thank you for your support ❤️!
We do not support or promote any form of piracy, copyright infringement, or illegal use of software, video content, or digital resources.
Any mention of third-party sites, tools, or platforms is purely for informational purposes. It is the responsibility of each reader to comply with the laws in their country, as well as the terms of use of the services mentioned.
We strongly encourage the use of legal, open-source, or official solutions in a responsible manner.



Comments