NGINX Proxy Mananger¶
Github ¶
Overview¶
NGINX Proxy Mananger is a user-friendly, web-based interface for configuring Nginx as a reverse proxy, simplifying the management of multiple web services on a single IP address, especially for home labs and self-hosted applications, by offering easy setup for proxy hosts, Let's Encrypt SSL certificates, redirects, access controls, and stream proxying, all within Docker containers. It removes the need for manual Nginx configuration, allowing quick deployment and management of secure web access to internal services through a simple dashboard.
Instead of remembering 8000 different IP-ADDR:PORT combos, you can use NPM to set a reverse proxy to service.domain.me.
Installation¶
Docker Compose¶
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80" # HTTP
- "81:81" # Admin UI
- "443:443" # HTTPS
environment:
DB_SQLITE_FILE: "/data/database.sqlite"
volumes:
- ${APPDATA}/ingress/npm/data:/data
- ${APPDATA}/ingress/npm/letsencrypt:/etc/letsencrypt
Usage¶
-
Navigate to you
IP-ADDR:PORTaddress, using the Admin UI port set in yourcompose.yamlabove. -
Login with:
- EMAIL: EMAIL@example.com
- Password: changeme
(probably best to change the password immediately.)
-
Go to SSL Certificates, "Add Certificates", select "Let's Encrypt".
-
Enter your DDNS address, valid email, enable "Use a DNS challenge", choose your DNS provider, add your DDNS token, accept TOS and save.
Note
You can get a DDNS from multiple providers including DuckDNS, cloudflare, or porkbun.
To set a Host:
-
Select "Hosts" > "Proxy Hosts"
-
Add Proxy Host
-
Under Domain Names input desired domain
-
service.domain.com
-
or whatever you want it to be called
-
-
Scheme: HTTP (the reverse proxy w/ your SSL cert will forward to HTTPS).
-
Forward your hostname / IP of the hosting machine/service.
-
Forward Port - use port defined in service. This would be the host port defined in a container.
- e.g. a
compose.yamlwith: Would use port 3005 as the forwarded IP, not 8080.
- e.g. a
-
Choose your ACL rule.
-
Choose "Block COmmon Exploits" and "Websockets support"
-
Select the SSL tab at the top
-
Select the SSL cert made earlier.
-
Force SSL and HTTP/2 support.
-
-
Save
Now you can access service.domain.com instead of 192.168.3.20:3005.