Installing Nginx UI – An Open-Source WebUI for Nginx Nginx UI, an open-source web GUI for managing Nginx, can be installed on Ubuntu 24.04 either as a system service or via Docker, with features including real-time stats, automatic Let's Encrypt TLS, performance monitoring, and LLM-assisted config editing. The guide covers setting up a reverse proxy with TLS, ACME certificate management, and creating a virtual host through the dashboard. Nginx UI is an open-source web GUI for managing Nginx, single-node or clustered, with real-time stats, automatic Let's Encrypt TLS, performance monitoring, and even LLM-assisted config editing. This guide installs it on Ubuntu 24.04, puts it behind a reverse proxy with TLS, sets up ACME certificate management, and creates a virtual host through the dashboard. Prerequisites:an Ubuntu 24.04 server, non-root sudo user, a domain A record e.g. nginx-ui.example.com , Docker installed if you choose that install path. bash $ sudo apt update $ sudo apt install nginx -y Pick one of the two install methods below. Runs Nginx UI as a system service, managing the host's Nginx directly. bash $ curl -O https://cloud.nginxui.com/install.sh $ sudo bash install.sh install $ nginx-ui --version $ sudo systemctl start nginx-ui $ sudo systemctl status nginx-ui Runs as a container — you won't be able to edit the host's Nginx configs directly through it. bash $ mkdir -p ~/nginx-ui-docker $ cd ~/nginx-ui-docker $ sudo mkdir -p /opt/nginx-ui/nginx $ sudo mkdir -p /opt/nginx-ui/config $ sudo mkdir -p /opt/nginx-ui/www $ nano docker-compose.yml version: '3.8' services: nginx-ui: image: uozi/nginx-ui:latest container name: nginx-ui restart: always environment: - TZ=UTC volumes: - /opt/nginx-ui/nginx:/etc/nginx - /opt/nginx-ui/config:/etc/nginx-ui - /opt/nginx-ui/www:/var/www ports: - "127.0.0.1:9000:80" networks: - nginx-ui-net networks: nginx-ui-net: driver: bridge bash $ sudo docker compose up -d $ sudo docker compose ps $ curl -X GET http://localhost:9000 Nginx UI listens on localhost:9000 . Put it behind a public vhost with WebSocket support needed for live stats/terminal : bash $ cd /etc/nginx/sites-available $ sudo nano nginx-ui.conf map $http upgrade $connection upgrade { default upgrade; '' close; } server { listen 80; listen :: :80; server name nginx-ui.example.com; location / { proxy set header Host $host; proxy set header X-Real-IP $remote addr; proxy set header X-Forwarded-For $proxy add x forwarded for; proxy set header X-Forwarded-Proto $scheme; proxy http version 1.1; proxy set header Upgrade $http upgrade; proxy set header Connection $connection upgrade; proxy pass http://127.0.0.1:9000; } } bash $ sudo rm -f /etc/nginx/sites-enabled/default $ sudo ln -s /etc/nginx/sites-available/nginx-ui.conf /etc/nginx/sites-enabled/ $ sudo nginx -t $ sudo systemctl restart nginx bash $ sudo apt install certbot python3-certbot-nginx -y $ sudo ufw allow 80,443/tcp $ sudo ufw reload $ sudo certbot --nginx -d nginx-ui.example.com -m admin@example.com --agree-tos --no-eff $ sudo systemctl restart nginx-ui Visit https://nginx-ui.example.com : https://acme-v02.api.letsencrypt.org/directory , leave Proxy/EAB blank. 1. Point a subdomain e.g. app.example.com at your server, then via Nginx UI's Terminal : bash $ sudo mkdir -p /var/www/app.example.com $ sudo nano /var/www/app.example.com/index.html