How to Access Nginx Proxy Manager: Default Login, IP, and Dashboard Guide [2026]
How to Access and Configure Nginx Proxy Manager (2025)
Nginx Proxy Manager (NPM) acts as a sophisticated frontend for the Nginx engine, simplifying the management of reverse proxies, SSL termination, and access control lists (ACLs). Unlike the raw Nginx configuration which requires editing text files and restarting the daemon, NPM provides a graphical UI. However, before you can manage traffic, you must successfully access the dashboard.
This guide covers the architecture of access, default credentials, network security, and troubleshooting common connection errors like ERR_TOO_MANY_REDIRECTS and ERR_HTTP2_PROTOCOL_ERROR.
---
1. Understanding NPM Access Ports and Networking
When you deploy NPM (typically via Docker), the application runs inside a container listening on specific internal ports. You must map these internal ports to ports on your host machine to access them from the outside world.
Default Port Mapping
NPM utilizes three primary ports that must be mapped in your Docker Compose or Run configuration:
| Internal Port | Purpose | Host Port Recommendation | | :--- | :--- | :--- | | 80 | HTTP Traffic | 80 or 8080 | | 443 | HTTPS Traffic | 443 | | 81 | Admin UI Interface | 81 (or 81,8181) |
How to Connect: 1. Localhost: If accessing from the machine hosting NPM, go to http://localhost:81. 2. Remote IP: If accessing from another device on the network, use the server's LAN IP: http://192.168.x.x:81. 3. Domain: If you have already set up a DNS A record pointing to your server, you can access it via http://your-domain.com:81.
> Pro Tip: Port 81 is the default for the UI to avoid conflicts with the main Nginx process handling traffic on Port 80/443. You can change this mapping in your docker-compose.yml file.
Docker Compose Configuration
Ensure your ports are exposed correctly. A common docker-compose.yml snippet looks like this:
services:
nginx-proxy-manager: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # Public HTTP - '443:443' # Public HTTPS - '81:81' # Admin Web Port # OR use a secure port like 81:8181 if you want to hide it from the public web initially.
---
2. Default Credentials and First Login
NPM enforces a security policy requiring you to update the default administrator password immediately after the first installation.
Default Credentials:
- Email Address:
admin@example.com - Password:
changeme
Step-by-Step Login Process:
1. Navigate to the IP:Port in your browser (e.g., http://192.168.1.50:81). 2. Enter admin@example.com and changeme. 3. The dashboard will instantly redirect you to a "Change Password" screen. 4. Enter your new strong password (use a password manager) and display name. 5. Click Save. You are now dropped into the main dashboard.
Resetting Lost Passwords
If you forget your custom password, you cannot recover it via email unless you have configured SMTP. Instead, you must reset it via the database (SQLite or MySQL).
The Python Fix (SQLite): If you are using the default SQLite database, you can use a simple Python script to hash a new password and update the database directly. This avoids the complexity of installing npm packages just for a reset.
import sqlite3
import bcrypt
Path to your database (usually mounted in docker volume)
db_path = 'data/database.sqlite' new_password = 'YourNewSecurePassword'
Generate bcrypt hash (10 rounds is standard for NPM)
password_bytes = new_password.encode('utf-8') hashed = bcrypt.hashpw(password_bytes, bcrypt.gensalt(rounds=10))
Connect and update
conn = sqlite3.connect(db_path) cursor = conn.cursor() try: # The id 1 is usually the main admin user cursor.execute("UPDATE user SET password=?, email='admin@example.com' WHERE id=1", (hashed.decode('utf-8'),)) conn.commit() print("Password reset successfully. Login with admin@example.com and 'YourNewSecurePassword'") except Exception as e: print(f"Error: {e}") finally: conn.close()
---
3. Exposing the Admin Panel Securely
Accessing NPM via an IP address and port (e.g., 192.168.1.50:81) is fine for home labs, but for production environments, you should proxy the Admin UI through the domain you are managing.
How to Proxy the Admin Panel
1. Prepare NPM: Go to the NPM Dashboard. You must be able to access the existing port 81 interface to do this setup. 2. Add Proxy Host: * Domain Names: npm.yourdomain.com (ensure this DNS A record points to your server IP). * Scheme: http * Forward Hostname/IP: 127.0.0.1 (Localhost). * Forward Port: 81 (The internal port of the NPM UI). 3. SSL: Select "Request a new SSL Certificate" (Let's Encrypt) and enable "Force SSL". 4. Cache Assets: Turn this OFF for the Admin UI to prevent login issues.
Now, you can access the UI at https://npm.yourdomain.com on the standard port 443.
> Warning: If you get an ERR_SSL_UNRECOGNIZED_NAME_ALERT, check your SSL provider settings. Sometimes, Cloudflare SSL needs to be set to "Full" or "Full (Strict)" rather than "Flexible".
---
4. Troubleshooting Common Access Issues
Sometimes, despite correct configuration, you cannot access the dashboard.
Error: Connection Refused / Timed Out
sudo ufw allow 81/tcp
sudo ufw reload
Error: 502 Bad Gateway
docker ps. Ensure the container is "Up". Check the logs: docker logs nginx-proxy-manager.Error: ERR_TOO_MANY_REDIRECTS
This often happens when setting up the Admin Host proxy.
Error: ERR_HTTP2_PROTOCOL_ERROR
http2 off;
---
5. Advanced Access: CrowdSec Integration
As of 2025, security is paramount. Accessing your proxy manager exposes a login endpoint to the internet. To protect against brute-force attacks, many experts integrate CrowdSec.
The keyword "crowsec nginx proxy manager bouncer" is popular because it allows NPM to read CrowdSec decisions and ban malicious IPs.
1. Setup CrowdSec: Install CrowdSec on the host. 2. Install the Nginx Bouncer: This places a ban logic in the Nginx configuration. 3. Benefit: If an IP attempts to brute force admin@example.com, CrowdSec temporarily bans them at the firewall level before they even reach the NPM application logic.
---
Summary Checklist
1. Local Access: http:// 2. Defaults: admin@example.com / changeme 3. Firewall: Ensure ports 80, 443, and 81 are open. 4. Security: Change password immediately; consider limiting access by IP (Access Lists) or using CrowdSec.