Skip to main content
Public
README.md 6.09 KB

Nginx Proxy Manager

A powerful, self-hosted web interface for managing Nginx reverse proxy hosts with SSL/TLS certificates, featuring a clean, intuitive dashboard.

✨ Features

  • 🌐 Beautiful Web Interface - Manage everything through a modern, responsive dashboard
  • πŸ” SSL/TLS Certificates - Automatic Let's Encrypt integration with one-click SSL
  • πŸ”„ Reverse Proxy - Easily route domains to different backend services
  • πŸ“Š Access Control - IP restrictions and basic authentication
  • πŸ”€ Redirections - Create 301/302 redirects with ease
  • πŸ“¨ Stream Support - TCP/UDP forwarding capabilities
  • ⚑ Performance - Built on Nginx for high performance and reliability
  • 🐳 Docker First - Containerized deployment for easy setup
  • πŸš€ Quick Start

    Prerequisites

  • Docker and Docker Compose
  • Ports 80, 81, and 443 available
  • Docker Compose (Recommended)

    Create a docker-compose.yml file:

    YAML
    1
    2
    version: '3.8'
    

    services: app: image: 'jc21/nginx-proxy-manager:latest' container_name: nginx-proxy-manager restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - .//data - ./letsencrypt:/etc/letsencrypt environment: - DB_SQLITE_FILE=/data/database.sqlite

    Start the application:

    BASH
    1
    docker-compose up -d

    Docker Run

    BASH
    1
    2
    docker run -d \
    

    --name nginx-proxy-manager \ -p 80:80 \ -p 81:81 \ -p 443:443 \ -v $(pwd)//data \ -v $(pwd)/letsencrypt:/etc/letsencrypt \ --restart unless-stopped \ jc21/nginx-proxy-manager:latest

    πŸ“– Initial Setup

    1. Access the Admin Panel

  • Open your browser to: http://your-server-ip:81
  • Default credentials:
  • Email: [email protected]
  • Password: changeme
  • 2. Change Default Password

  • Immediately change the default admin password after first login
  • 3. Configure Your First Proxy Host

  • Click "Proxy Hosts" β†’ "Add Proxy Host"
  • Enter your domain name
  • Set the forwarding IP/port of your backend service
  • Enable SSL with Let's Encrypt if desired
  • πŸ—οΈ Architecture

    TEXT
    1
    2
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    

    β”‚ Web Browser β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ HTTPS/HTTP β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Nginx Proxy β”‚ β”‚ Manager (Nginx) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Your Backend β”‚ β”‚ Services β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    πŸ“‹ Common Use Cases

    1. **Host Multiple Websites**

    YAML
    1
    2
    example.com   β†’ 192.168.1.10:3000
    

    api.example.com β†’ 192.168.1.20:8080 blog.example.com β†’ WordPress container

    2. **Add SSL to Legacy Apps**

  • Add HTTPS to applications that don't support SSL natively
  • Automatic certificate renewal
  • 3. **Development Environments**

    YAML
    1
    2
    myapp.local   β†’ localhost:3000
    

    api.local β†’ localhost:4000 db.local β†’ phpMyAdmin container

    4. **Access Control**

  • Restrict access to internal tools by IP
  • Add basic authentication for staging sites
  • πŸ”§ Configuration Examples

    Basic Proxy Host

    TEXT
    1
    2
    Domain Names: app.yourdomain.com
    

    Scheme: http Forward Hostname: 192.168.1.100 Forward Port: 3000

    SSL Configuration

  • Enable "SSL Certificate"
  • Choose "Request a new SSL Certificate"
  • Enter email for Let's Encrypt
  • Force SSL enabled
  • Advanced Configuration

    Custom Nginx configurations can be added in the "Advanced" tab for specific needs.

    πŸ› οΈ Maintenance

    Backup Your Data

    BASH
    1
    2
    # Backup configuration and database
    

    tar czf npm-backup-$(date +%Y%m%d).tar.gz data/ letsencrypt/

    Update to Latest Version

    BASH
    1
    2
    docker-compose pull
    

    docker-compose up -d

    View Logs

    BASH
    1
    2
    docker-compose logs -f
    

    # or docker logs nginx-proxy-manager -f

    πŸ› Troubleshooting

    Common Issues

    1. Port 80/443 Already in Use

    BASH
    1
    2
       # Check what's using the ports
    

    sudo netstat -tulpn | grep :80 sudo netstat -tulpn | grep :443

    2. SSL Certificate Issues

  • Ensure port 80 is publicly accessible for Let's Encrypt validation
  • Check DNS records propagate correctly
  • 3. Can't Access Admin Panel (Port 81)

  • Check firewall rules: sudo ufw status
  • Verify container is running: docker ps
  • 4. Database Issues

    BASH
    1
    2
       # Reset to default (will lose configuration)
    

    docker-compose down -v docker-compose up -d

    πŸ”’ Security Best Practices

    1. Change Default Credentials - Immediately after first login 2. Use Strong Passwords - For admin panel and basic auth 3. Keep Updated - Regularly update to latest version 4. Firewall Configuration - Restrict access to port 81 5. Regular Backups - Backup your data volume regularly 6. Use SSL Everywhere - Enable SSL for all public-facing hosts

    πŸ“š API Usage

    Nginx Proxy Manager provides a REST API for automation:

    BASH
    1
    2
    3
    # Get authentication token
    

    curl -X POST http://your-server:81/api/tokens \ -H "Content-Type: application/json" \ -d '{"identity":"[email protected]","secret":"yourpassword"}'

    # List proxy hosts curl -X GET http://your-server:81/api/nginx/proxy-hosts \ -H "Authorization: Bearer YOUR_TOKEN"

    🀝 Contributing

    We welcome contributions! Please see our Contributing Guide for details.

    1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Submit a pull request

    πŸ“„ License

    This project is licensed under the MIT License - see the LICENSE file for details.

    ❀️ Support

  • Documentation: GitHub Wiki
  • Issues: GitHub Issues
  • Discord: Join our Community
  • πŸ† Acknowledgments

  • Built on the rock-solid foundation of Nginx
  • Thanks to all our contributors and users
  • Let's Encrypt for free SSL certificates
  • About

    A Docker-based application that provides a simple, powerful web interface to manage Nginx as a reverse proxy. Its primary goal is to make setting up forwarding domains, redirections, and free SSL certificates from Let's Encrypt easy for everyone, without needing deep Nginx expertise.


    748 files
    161 folders
    4.59 MB total size
    0 open issues
    0 open pull requests
    0 watchers
    12 forks
    0 stars
    823 views
    Updated Jan 10, 2026
    Languages
    TypeScript 44.4%
    JavaScript 41.8%
    YAML 7.7%
    Shell 1.3%
    SQL 1.0%
    CSS 0.6%
    Dockerfile 0.5%
    fulltest-cypress 0.4%
    HTML 0.3%
    start-dev 0.3%
    docs-upload 0.2%
    install-certbot-plugins 0.2%
    run 0.1%
    install-s6 0.1%
    LICENSE 0.1%
    test-and-build 0.1%
    buildx 0.1%
    frontend-build 0.1%
    wait-healthy 0.1%
    nginx-proxy-manager 0.1%
    docs-build 0.1%
    Env 0.1%
    destroy-dev 0.0%
    stop-dev 0.0%
    INI 0.0%
    cypress-dev 0.0%
    XML 0.0%
    check-health 0.0%
    up 0.0%
    type 0.0%
    Text 0.0%
    backend 0.0%
    frontend 0.0%
    prepare 0.0%
    nginx 0.0%
    base 0.0%