{"slug": "installing-nginx-ui-an-open-source-webui-for-nginx", "title": "Installing Nginx UI – An Open-Source WebUI for Nginx", "summary": "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.", "body_md": "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.\n\nPrerequisites:an Ubuntu 24.04 server, non-root sudo user, a domain A record (e.g.`nginx-ui.example.com`\n\n), Docker installed if you choose that install path.\n\n``` bash\n$ sudo apt update\n$ sudo apt install nginx -y\n```\n\nPick **one** of the two install methods below.\n\nRuns Nginx UI as a system service, managing the host's Nginx directly.\n\n``` bash\n$ curl -O https://cloud.nginxui.com/install.sh\n$ sudo bash install.sh install\n$ nginx-ui --version\n$ sudo systemctl start nginx-ui\n$ sudo systemctl status nginx-ui\n```\n\nRuns as a container — you won't be able to edit the host's Nginx configs directly through it.\n\n``` bash\n$ mkdir -p ~/nginx-ui-docker\n$ cd ~/nginx-ui-docker\n$ sudo mkdir -p /opt/nginx-ui/nginx\n$ sudo mkdir -p /opt/nginx-ui/config\n$ sudo mkdir -p /opt/nginx-ui/www\n$ nano docker-compose.yml\nversion: '3.8'\n\nservices:\n nginx-ui:\n   image: uozi/nginx-ui:latest\n   container_name: nginx-ui\n   restart: always\n   environment:\n     - TZ=UTC\n   volumes:\n     - /opt/nginx-ui/nginx:/etc/nginx\n     - /opt/nginx-ui/config:/etc/nginx-ui\n     - /opt/nginx-ui/www:/var/www\n   ports:\n     - \"127.0.0.1:9000:80\"\n   networks:\n     - nginx-ui-net\n\nnetworks:\n nginx-ui-net:\n   driver: bridge\nbash\n$ sudo docker compose up -d\n$ sudo docker compose ps\n$ curl -X GET http://localhost:9000\n```\n\nNginx UI listens on `localhost:9000`\n\n. Put it behind a public vhost with WebSocket support (needed for live stats/terminal):\n\n``` bash\n$ cd /etc/nginx/sites-available\n$ sudo nano nginx-ui.conf\nmap $http_upgrade $connection_upgrade {\n    default upgrade;\n    ''      close;\n}\n\nserver {\n    listen          80;\n    listen          [::]:80;\n\n    server_name     nginx-ui.example.com;\n\n    location / {\n        proxy_set_header    Host                $host;\n        proxy_set_header    X-Real-IP           $remote_addr;\n        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;\n        proxy_set_header    X-Forwarded-Proto   $scheme;\n        proxy_http_version  1.1;\n        proxy_set_header    Upgrade             $http_upgrade;\n        proxy_set_header    Connection          $connection_upgrade;\n        proxy_pass          http://127.0.0.1:9000;\n    }\n}\nbash\n$ sudo rm -f /etc/nginx/sites-enabled/default\n$ sudo ln -s /etc/nginx/sites-available/nginx-ui.conf /etc/nginx/sites-enabled/\n$ sudo nginx -t\n$ sudo systemctl restart nginx\nbash\n$ sudo apt install certbot python3-certbot-nginx -y\n$ sudo ufw allow 80,443/tcp\n$ sudo ufw reload\n$ sudo certbot --nginx -d nginx-ui.example.com -m admin@example.com --agree-tos --no-eff\n$ sudo systemctl restart nginx-ui\n```\n\nVisit `https://nginx-ui.example.com`\n\n:\n\n`https://acme-v02.api.letsencrypt.org/directory`\n\n, leave Proxy/EAB blank.**1. Point a subdomain** (e.g. `app.example.com`\n\n) at your server, then via Nginx UI's **Terminal**:\n\n``` bash\n$ sudo mkdir -p /var/www/app.example.com\n$ sudo nano /var/www/app.example.com/index.html\n<html>\n<head>\n<title>Sample Nginx Virtual Host Application</title>\n</head>\n<body>\n<h1 align=\"center\">Hello from your new virtual host!</h1>\n</body>\n</html>\nbash\n$ sudo chown -R www-data:www-data /var/www/app.example.com\n```\n\n**2. Manage Sites → Sites List → Add:**\n\n`server_name`\n\n= your domain, `root`\n\n= `/var/www/app.example.com`\n\n`index.html`\n\n, `index.htm`\n\n, `index.php`\n\nConfirm the vhost shows **Enabled**, then visit `https://app.example.com`\n\nto see the page live. **Advanced Mode** on the edit screen gives you raw Nginx config access if you need it.\n\nNginx UI is managing your server's Nginx config with automated TLS and a live dashboard. From here:\n\nFor the full guide, visit the original article on ** Vultr Docs**.", "url": "https://wpnews.pro/news/installing-nginx-ui-an-open-source-webui-for-nginx", "canonical_source": "https://dev.to/vultr/installing-nginx-ui-an-open-source-webui-for-nginx-59j7", "published_at": "2026-07-31 12:38:42+00:00", "updated_at": "2026-07-31 13:04:18.387619+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Nginx UI", "Nginx", "Ubuntu", "Let's Encrypt", "Docker", "Certbot", "Vultr Docs"], "alternates": {"html": "https://wpnews.pro/news/installing-nginx-ui-an-open-source-webui-for-nginx", "markdown": "https://wpnews.pro/news/installing-nginx-ui-an-open-source-webui-for-nginx.md", "text": "https://wpnews.pro/news/installing-nginx-ui-an-open-source-webui-for-nginx.txt", "jsonld": "https://wpnews.pro/news/installing-nginx-ui-an-open-source-webui-for-nginx.jsonld"}}