Editing Nginx config files over SSH works, but a web interface can make day-to-day changes faster, especially when you add proxy hosts and certificates often. Two popular open-source options take different approaches:

  • Nginx UI edits your server’s real Nginx configuration through a browser, with a code editor, templates, and Let’s Encrypt automation.
  • Nginx Proxy Manager (NPM) runs its own Nginx in Docker, and generates the configs from a simple form, for reverse proxy hosts with SSL.

Which one fits?

Nginx UI Nginx Proxy Manager
Manages Your existing host Nginx Its own containerised Nginx
Config style Raw config editing (plus templates) Forms; custom snippets per host
Best for Admins who know Nginx and want a GUI Quickly proxying Docker apps with SSL
Static sites, PHP, complex configs Yes Limited
Certificates Let’s Encrypt (HTTP and DNS challenges) Let’s Encrypt (HTTP and DNS challenges)
Extras Log viewer, terminal, server stats, multi-node Access lists, streams (TCP/UDP), redirects

If you already run Nginx with hand-written configs, use Nginx UI, or keep using the command line. If the server mainly runs Docker apps that need HTTPS, NPM is the quickest path. For a deeper look at NPM, see Nginx Proxy Manager.

Nginx UI: install

The project provides an install script for a native setup (a systemd service that manages /etc/nginx):

bash -c "$(curl -L https://raw.githubusercontent.com/0xJacky/nginx-ui/main/install.sh)" @ install
sudo systemctl status nginx-ui

Read the script before running it if you prefer. Nginx UI listens on port 9000 by default. Its config file is /usr/local/etc/nginx-ui/app.ini. Docker images are also available, mounting /etc/nginx from the host.

On first visit, you set up the admin account. Do it right away.

Nginx UI: what you get

  • Site list and editor: edit server blocks with syntax highlighting. Nginx UI runs nginx -t before reloading, and refuses broken configs.
  • Templates for common setups (reverse proxy, PHP, WebSocket).
  • Certificates: issue and auto-renew Let’s Encrypt certificates, including DNS challenges for wildcards.
  • Logs and stats: access and error log viewer, CPU, memory and connection graphs.
  • Config backups, and multi-server management from one dashboard.

Nginx Proxy Manager: install

# /opt/npm/compose.yaml
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "127.0.0.1:81:81"      # admin UI: keep it private
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

NPM needs ports 80 and 443 itself, so it can’t run alongside another web server on the same ports. Reach the admin UI on port 81 via an SSH tunnel. The initial login is shown in the docs, and you change it on first login. See SSH tunnelling.

Securing any Nginx web GUI

A web panel that edits your web server config is effectively root-level access to your sites. Treat it accordingly:

  • Don’t expose the admin port publicly. Bind it to 127.0.0.1, and use an SSH tunnel or VPN. See Tailscale.
  • If it must be public, put it behind HTTPS plus 2FA (Nginx UI supports TOTP and passkeys) or SSO, and allow only your IPs.
  • Use strong, unique passwords, and keep the panel updated. Admin panels are frequent targets.
  • Keep your configs in Git, or take regular backups of /etc/nginx, so a bad change can be rolled back. See Nginx config testing.

Command line still matters

Even with a GUI, know the basics for when the panel is down:

sudo nginx -t                    # test config
sudo systemctl reload nginx      # apply
sudo tail -f /var/log/nginx/error.log

See Nginx access and error logs and Nginx server blocks.

Quick reference

Item Nginx UI NPM
Admin port 9000 81
Config /usr/local/etc/nginx-ui/app.ini ./data (SQLite)
Manages /etc/nginx on the host its own Nginx in Docker
Needs ports 80/443 No (uses host Nginx) Yes

Related: Coolify and Caddy reverse proxy.

  • Nginx
  • Self-Hosting
  • Docker