Nginx Proxy Manager vs Nginx: Which to Self-Host?

Quick Verdict

Nginx Proxy Manager is the right choice for most self-hosters. It wraps Nginx in a web UI that handles proxy host creation, SSL certificate management, and access control without touching config files. Use raw Nginx only if you need features NPM doesn’t expose or want full control over every directive.

Overview

Nginx Proxy Manager (NPM) is a web-based management interface built on top of Nginx. It provides a GUI for creating proxy hosts, redirects, streams, and managing Let’s Encrypt SSL certificates. Under the hood, it generates and manages Nginx config files automatically. Current version: v2.13.7.

Nginx is the web server and reverse proxy that NPM is built on. Using it directly means writing config files by hand, managing SSL certificates yourself (typically via Certbot), and reloading the server after every change. Current version: 1.28.2.

NPM is Nginx with training wheels — and for self-hosting, training wheels are a feature, not a limitation.

Feature Comparison

FeatureNginx Proxy Manager v2.13Nginx 1.28
Configuration methodWeb UIConfig files
SSL certificate managementBuilt-in (Let’s Encrypt, custom)Manual (Certbot + cron)
Proxy host creationClick-through wizardWrite server block
Access listsGUI-managedManual (allow/deny, basic_auth)
Custom Nginx configAdvanced tab per hostFull control
Redirect managementGUI-managedWrite rewrite rules
Stream (TCP/UDP) proxyingGUI-managedManual (stream block)
404/error pagesDefault or customFully customizable
Multi-user accessYes (user accounts)No (file-level access)
APIREST API availableNo native API
Audit loggingYes (access log per host)Manual (per-server logging)
Docker integrationSingle container deploySingle container deploy

Installation Complexity

Nginx Proxy Manager

services:
  npm:
    image: jc21/nginx-proxy-manager:2.13.7
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - npm-data:/data
      - npm-letsencrypt:/etc/letsencrypt
    restart: unless-stopped

volumes:
  npm-data:
  npm-letsencrypt:

Deploy, open port 81, log in with [email protected] / changeme, and start adding proxy hosts through the UI.

Nginx

services:
  nginx:
    image: nginx:1.28.2
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./conf.d:/etc/nginx/conf.d:ro
      - ./certs:/etc/nginx/certs:ro
    restart: unless-stopped

Then write config files, set up Certbot for SSL, configure a renewal cron, and reload Nginx after each change.

Winner: NPM by a wide margin for ease of setup.

Performance and Resource Usage

MetricNPMNginx (raw)
Idle RAM~80-120 MB~5-10 MB
CPU (idle)MinimalMinimal
Disk usage~200 MB~10 MB (Alpine)
Request overheadNegligible (it IS Nginx)Baseline
Max connectionsSame as Nginx~10,000+ per worker

NPM uses more RAM because it runs Node.js for the management UI alongside Nginx. The proxy performance itself is identical — NPM generates standard Nginx config files that Nginx executes. You’re not losing proxy performance by using NPM.

Community and Support

MetricNPMNginx
GitHub stars23K+N/A
Active developmentYesYes (F5/Nginx Inc.)
DocumentationGood (wiki)Excellent (decades)
Community sizeLarge (self-hosting)Massive (industry-wide)
Troubleshooting resourcesModerateExtensive

Nginx has significantly more documentation and community resources, but most of it covers web server use cases rather than reverse proxy setup. NPM’s community is focused specifically on reverse proxy management for self-hosting.

Use Cases

Choose Nginx Proxy Manager If…

  • You want a GUI for managing proxy hosts
  • You don’t want to learn Nginx config file syntax
  • You need easy Let’s Encrypt certificate management
  • You manage 5-50 self-hosted services
  • You want multiple users to manage proxy hosts
  • You want to get a reverse proxy running in under 5 minutes

Choose Raw Nginx If…

  • You need full control over every Nginx directive
  • You’re using Nginx modules (Lua, njs, GeoIP2, RTMP)
  • You’re serving static files alongside proxying
  • You need config-as-code (version controlled config files)
  • You manage hundreds of virtual hosts programmatically
  • You’re running in production with strict performance requirements
  • You need features NPM doesn’t expose (custom error pages, complex rewrite rules)

Final Verdict

NPM for self-hosting, raw Nginx for everything else. Nginx Proxy Manager eliminates the most tedious part of self-hosting — manually writing and maintaining reverse proxy configs. Since NPM runs real Nginx underneath, you get the same proxy performance with a dramatically better management experience.

The Advanced tab in NPM lets you inject custom Nginx config per host, which covers 90% of edge cases. If you hit the remaining 10%, you probably need raw Nginx — but most self-hosters never will.

Frequently Asked Questions

Is NPM slower than raw Nginx?

No. The proxy path is identical — NPM generates Nginx config files that Nginx executes. The management UI adds ~100 MB of RAM overhead but doesn’t affect request handling.

Can I migrate from NPM to raw Nginx?

Yes. NPM stores its generated configs in /data/nginx/. You can extract these, clean them up, and use them as a starting point for a raw Nginx setup.

Does NPM support wildcard SSL certificates?

Yes. NPM supports DNS challenge-based wildcard certificates through its UI. You’ll need API credentials for your DNS provider (Cloudflare, Route53, etc.).

Can I use NPM’s Advanced tab for custom config?

Yes. Each proxy host has an Advanced tab where you can add raw Nginx directives. This is useful for custom headers, caching rules, or WebSocket configurations that the GUI doesn’t expose.

Should I firewall port 81?

Yes. Port 81 is the admin UI and should never be publicly accessible. Access it only through your local network, a VPN, or a separate authenticated proxy.