docker.recipes

NGINX Proxy Manager

beginner

Easy-to-use reverse proxy with a beautiful web interface for managing SSL certificates, proxy hosts, and access control.

Overview

NGINX Proxy Manager transforms the traditionally complex world of reverse proxy configuration into an intuitive web-based experience. Built on top of NGINX's battle-tested reverse proxy capabilities, this application provides a beautiful graphical interface for managing proxy hosts, SSL certificates, and access controls without requiring deep knowledge of NGINX configuration syntax. The project emerged from the need to democratize reverse proxy management, making enterprise-grade load balancing and SSL termination accessible to users who prefer visual configuration over command-line editing. This Docker deployment leverages NGINX's event-driven architecture and proven performance characteristics while wrapping them in a user-friendly management layer. The container handles automatic SSL certificate provisioning through Let's Encrypt integration, eliminating the manual certificate management that traditionally requires cron jobs and custom scripts. The web interface communicates directly with the underlying NGINX instance, translating GUI actions into optimized NGINX configuration blocks that maintain the performance benefits of native NGINX while hiding the complexity. Homelab enthusiasts, small development teams, and system administrators managing multiple web services will find this setup particularly valuable. Rather than manually editing NGINX configuration files and restarting services, users can add new proxy hosts, configure SSL certificates, and set up access restrictions through an elegant web dashboard. The combination delivers enterprise-grade reverse proxy functionality with the simplicity of point-and-click configuration, making advanced networking features accessible to users regardless of their NGINX expertise level.

Key Features

  • Visual proxy host management with real-time NGINX configuration generation
  • Automatic Let's Encrypt SSL certificate provisioning and renewal with wildcard support
  • Built-in access list system for IP-based restrictions and HTTP basic authentication
  • Dead host detection and automatic failover for upstream servers
  • Custom NGINX configuration injection for advanced use cases and specific directives
  • Stream proxy support for TCP/UDP traffic forwarding beyond HTTP/HTTPS
  • Advanced SSL options including HTTP/2, HSTS, and custom certificate uploads
  • Audit logging with detailed request tracking and proxy performance metrics

Common Use Cases

  • 1Homelab reverse proxy for self-hosted applications like Nextcloud, Plex, and Home Assistant
  • 2Development environment proxy for testing multiple applications on different ports
  • 3Small business website hosting with automatic SSL for multiple domains
  • 4Internal corporate proxy for securing access to development and staging environments
  • 5Multi-tenant application hosting with domain-based routing and SSL isolation
  • 6Load balancing for containerized applications across multiple Docker hosts
  • 7Secure remote access gateway for internal web applications and dashboards

Prerequisites

  • Minimum 256MB RAM for basic proxy operations, 512MB recommended for multiple hosts
  • Ports 80, 443, and 81 available (or alternative ports for custom configurations)
  • Domain names with proper DNS records pointing to your server for SSL certificate validation
  • Basic understanding of DNS configuration and domain management
  • Firewall configuration allowing inbound traffic on HTTP/HTTPS ports
  • Docker host with persistent storage for certificate and configuration data

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 nginx-proxy-manager:
3 image: jc21/nginx-proxy-manager:latest
4 container_name: nginx-proxy-manager
5 restart: unless-stopped
6 ports:
7 - "80:80"
8 - "443:443"
9 - "81:81"
10 volumes:
11 - npm_data:/data
12 - npm_letsencrypt:/etc/letsencrypt
13 networks:
14 - npm-network
15
16volumes:
17 npm_data:
18 npm_letsencrypt:
19
20networks:
21 npm-network:
22 driver: bridge

.env Template

.env
1# Default admin credentials (change after first login)
2# Email: admin@example.com
3# Password: changeme

Usage Notes

  1. 1Docs: https://nginxproxymanager.com/guide/
  2. 2Admin panel at http://localhost:81 - default: admin@example.com / changeme
  3. 3Add Proxy Hosts via UI - SSL certificates auto-generated with Let's Encrypt
  4. 4Access Lists for IP-based restrictions and basic auth
  5. 5Custom nginx config available for advanced use cases
  6. 6Perfect for homelab - no command line nginx config needed

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 nginx-proxy-manager:
5 image: jc21/nginx-proxy-manager:latest
6 container_name: nginx-proxy-manager
7 restart: unless-stopped
8 ports:
9 - "80:80"
10 - "443:443"
11 - "81:81"
12 volumes:
13 - npm_data:/data
14 - npm_letsencrypt:/etc/letsencrypt
15 networks:
16 - npm-network
17
18volumes:
19 npm_data:
20 npm_letsencrypt:
21
22networks:
23 npm-network:
24 driver: bridge
25EOF
26
27# 2. Create the .env file
28cat > .env << 'EOF'
29# Default admin credentials (change after first login)
30# Email: admin@example.com
31# Password: changeme
32EOF
33
34# 3. Start the services
35docker compose up -d
36
37# 4. View logs
38docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/nginx-proxy-manager/run | bash

Troubleshooting

  • 502 Bad Gateway errors: Verify upstream services are running and accessible from the NGINX Proxy Manager container network
  • Let's Encrypt certificate failures: Check DNS propagation and ensure port 80 is accessible from the internet for HTTP-01 challenges
  • Admin panel inaccessible on port 81: Confirm no other services are using port 81 and check Docker port mapping configuration
  • SSL certificate renewal failures: Verify domain DNS still points to your server and upstream applications haven't changed ports
  • Proxy host configuration not applying: Check for syntax errors in custom NGINX configurations and review container logs
  • Container restart loops: Examine persistent volume permissions and ensure data directories are writable by the container user

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Components

nginx-proxy-manager

Tags

#nginx#proxy-manager#ssl#gui#reverse-proxy#letsencrypt

Category

Web Servers & Reverse Proxies
Ad Space