
Всем привет! Меня зовут Александр, и я системный инженер в облачном провайдере mClouds.ru. В этой статье я расскажу как использовать веб-интерфейс в Nginx, на примере Nginx UI и Nginx Proxy Manager. Перечислим основные «кейсы» использования подобных веб-интерфейсов.
Итак, ни одна инфраструктура не обходится без веб-сервера или пограничного proxy. Через них пользователи могут взаимодействовать с компанией. Самое известное решение для подобного рода задач – Nginx. ПО имеет богатый функционал и широкое комьюнити. Разработчики регулярно выпускают новые версии, исправляя ошибки и закрывая найденные уязвимости. Но иногда возникает задача мониторинга таких серверов. И в случае ограниченности ресурсов или для ускорения первичной настройки и последующей эксплуатации применяют сторонние сервисы – веб-интерфейсы управления. В данной статье мы рассмотрим два их них – Nginx UI и Nginx Proxy Manager.
Перечислим основные «кейсы» использования подобных веб-интерфейсов:
Нехватка ресурсов для размещения систем мониторинга и визуализации: в ситуации, когда у вас попросту не хватает ресурсов (как серверных, так и финансовых) для создания отдельной виртуальной машины с размещением на нем системы мониторинга, такие решения могут помочь вам собирать более понятные и детальные данные о состоянии вашего веб-сервера. Более того, такие данные куда проще интерпретировать и просматривать людям, не связанными с IT: например, менеджерам или руководителям.
Минимизация используемого ПО: доступ до панели управления осуществляется через веб-браузер. Это поможет вам минимизировать перечень используемого в работе ПО
Повышение безопасности сервера: Через панель управления можно редактировать конфигурации сайтов, размещенных на веб-сервере. Администраторам не придется создавать отдельных пользователей в самой ОС, выдавать им права и следить за тем, чтобы пользователь случайно или умышленно не изменил критические файлы в системе. В случае с веб-панелью управления, максимум, что сможет задеть пользователь – это конфигурация самого сайта, не затронув других файлов
Nginx UI
Nginx UI – решение с открытым исходным кодом, представляющее собой простое и многофункциональное решение по управлению, мониторингу и администрированию серверов под управлением nginx. Проект реализован на Go и Vue.js.
Основными возможностями Nginx UI являются:
Управление сайтами: в интерфейсе реализована возможность создавать, изменять, удалять и изменять виртуальные сайты
Неизменность структуры файлов: при установке в ОС сервис не изменяет структуру файлов и каталогов. То есть, все файлы всё так же будут находиться в стандартной для себя папке /etc/nginx
Возможность получения и управления SSL-сертификатами Let’s Encrypt
Мониторинг состояния сервера и потребляемых им ресурсов
Установка выполняется в одну команду:
bash -c "$(curl -L https://raw.githubusercontent.com/0xJacky/nginx-ui/main/install.sh)" @ install.
После установки сервис автоматически запустится и начнет работу на порту 9000 tcp.

Удалить NginxUI можно при помощи команды
bash -c "$(curl -L https://raw.githubusercontent.com/0xJacky/nginx-ui/main/install.sh)" @ remove
Сама веб-панель представляет собой бинарный файл и systemd-юнит для управления внутри ОС. Скрипт загружает конфигурацию, формирует systemd-демон и запускает его. Все данные хранятся в базе данных sqllite вместе с конфигурацией
Файл конфигурации по умолчанию расположен по пути /usr/local/etc/nginx-ui/app.ini. В нем можно изменять параметры панели: переключить с http на https, изменить порт подключения, включить ротацию логов и другое.
Подключимся к интерфейсу по ссылке: http://<IP-адрес>:9000. И мы видим окно для завершения настройки. В нем необходимо указать имя пользователя с правами администратора, его почтовый адрес, пароль и, опционально, название базы данных.

После ввода необходимых данных мы попадаем на форму авторизации в системе. Для первичного входа в систему используем данные, введенные на предыдущем шаге. После успешной авторизации мы попадаем на главную страницу, где расположены графики потребления памяти, дискового пространства и swap, а так же графики сетевой нагрузки и загрузки IOPS и базовые сведения о системе: время непрерывной работы севера, версия ОС и модель процессора.


Функционал изменения содержания конфигурационного файла реализован в виде отдельного текстового редактора чем-то напоминающий по цветовому оформлению Sublime, в который добавлена интеграция с Chat GPT. Подключить нейросеть можно в конфигурации самого Nginx UI. Для того, чтобы открыть папку или файл нужно нажать кнопку Modify в правой части строки с файлом или папкой


Конфигурации проходят автоматическое тестирование. После изменения файл можно сразу же отправить «в продакшн», нажав соответствующую кнопку.
В панели используется локальная база пользователей, которых можно создавать, изменять и удалять в отдельном меню. Поддерживается включение двухфакторной авторизации с Google Authenticator. Для работы в веб-терминале будет необходимо авторизоваться дополнительно, используя созданную в ОС учетную запись.


Ещё в панели предусмотрен функционал создания резервных копий конфигураций nginx и UI. Сделать это можно в соответствующем меню.

Чтобы создать резервную копию необходимо нажать на кнопку Create Backup

На ваш компьютер будет загружен zip-архив с кофигурациями. Так же вам потребуется сохранить токен восстановления, который отобразится на экране – без него восстановить настройки Nginx не удастся.
Для восстановления необходимо просто перенести архив в соответствующее поле, ввести токен, выбрать, что будет восстановлено: настройки nginx или настройки UI , или и то, и другое. Далее, после нажатия на кнопку Start Restore выбранные вами настройки будут восстановлены, а Nginx перезапущен.

Данная веб-панель представляет собой своего рода «швейцарский нож» для управления веб-сервером на базе Nginx. Через неё администратор может буквально «на лету» получать данные о состоянии сервера, следить за потреблением ресурсов, изменять конфигурации «на лету», просматривать логи nginx в удобном читабельном формате. При необходимости, можно подключиться к терминалу ОС. Решение имеет приятный и современный графический интерфейс. А встроенная интеграция с Chat GPT может помочь избежать ошибок в конфигурации
Nginx Proxy Manager
Теперь рассмотрим другого представителя веб-интерфейсов для Nginx – Nginx Proxy Manager. Это решение предназначено для управление сервером Nginx в случае, когда он используется в качестве proxy-сервера. Продукт выполнен в виде docker-контейнера – это значит, что для его установки на сервере потребуется развернуть docker. Фактически, оно представляет собой контейнер с nginx и веб-интерфейсом, через который можно этот Nginx настраивать как пограничный proxy-сервер.
Выполним установку. Для обзора мы будем использовать сервер с ОС Ubuntu 22.04.5 и установленными docker и плагином docker-compose.
Подключимся к серверу с docker и создадим docker compose файл с расширением *.yml и откроем его:
touch compose.yml
sudo nano compose.yml

services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
В данной конфигурации мы указали следующие параметры:
Образ, который будет загружен (jc21/nginx-proxy-manager) последней версии
Порты, которые будут прослушиваться контейнером: tcp 80 – порт HTTP, tcp 443 – порт HTTPS и tcp 81 – порт для подключения к веб-панели администратора
Два примонтированных тома из хостовой ОС для хранения данных и сертификатов
Отметим, что подобная конфигурация заявлятется разработчиком как минимально необходимая.
Закроем файл и создадим контейнер:
docker compose up -d

Проверим, что контейнер запущен и работает:
docker ps

подключимся к веб-панели администратора по адресу: http://<IP-адрес_сервера>:81, и мы попадаем на страницу авторизации

Для первого входа введем учетные данные по умолчанию: admin@example.com и пароль changeme
После успешно авторизации нам предлагают сменить информацию об администраторе. Обязательно должно быть изменен адрес электронной почты – другие поля могут остаться неизмененными. Далее задаем новый пароль После чего мы оказываемся на главном окне приложения.


Само окно очень минималистично: на нем нет графиков – только лишь сводная статистика и количестве управляемых хостов, недоступных хостов, хостов пересылки и количестве потоков.

Добавить proxy-хост можно в меню Hosts -> Proxy Hosts -> Add Proxy Host

В открывшемся меню необходимо указать:
доменное имя, по которому будут обращаться пользователи
Адрес или доменное имя хоста и порт , на который будет выполняться пересылка с указанного выше доменного имени
Протокол: http или https
В качестве дополнительных параметров можно указывать Access List, содержащий в себе правила доступа до хоста, блокировку общеизвестных веб-угроз и поддержку веб-сокетов, если таковую требует приложение, находящееся за Proxy.

Так же в отдельном меню можно указать SSL сертификаты и связанные с ними опции.
После добавления данных нажимаем Save и наш хост добавлен.
Для создания списка контроля доступа необходимо перейти в меню Access List и нажать на кнопку «Add Access List»

Во вкладке Details можно указать имя списка и выбрать два параметра: Satisfy Any и Pass Auth to Host

Во вкладке Authorization укажите параметры для простой авторизации через модульNginx ngx_http_auth_basic_module

И, наконец, во вкладке Access можно выполнить настройку самого списка контроля доступа, указывая IP-адреса и подсети и сопоставляя им действия: allow –разрешить доступ – и deny – запретить доступ.

Список построен по принципу – что не разрешено, то запрещено. Правила выполняются сверху вниз до первого совпадения источника.
В меню SSL Certificates осуществляется управление SSL сертификатами, которые используют сайты.

Во вкладке Users происходит управление локальными пользователями системы

В меню Audit Log можно просмотреть локальные логи.

Во вкладке Settings можно настроить, какую страницу будет видеть пользователь при запросе на несуществующий адрес на наш Proxy



В заключении можно отметить, что продукт, хоть и не имеет обширного функционала для мониторинга состояния сервера, хоть и требует дополнительного ПО для работы, но значительно упрощает конфигурацию пограничного proxy сервера на базе nginx, имея при себе функционал блокировки общеизвестных атак и встроенные списки контроля доступа. И со своими задачами ПО справляется хорошо.
В итоге, мы рассмотрели два совершенно разных продукта, имеющих различный функционал и предназначенный для разных задач, но одно они имеют общее – благодаря им, настройка Nginx становится куда проще, нагляднее и понятнее. Сами сервисы имеют приятный глазу графический интерфейс, что упрощает с ним работу. Установка подобных решений может помочь вам упросить взаимодействие с Nginx.
MaximusPrimie
Спасибо! Натолкнули на мысль. Если честно даже не подозревал, что есть такой инструмент, всю дорогу руками конфиг правил.