При развертывании высоконагруженных веб-приложений часто приходится взаимодействовать с прокси-сервером. Помимо прямого прокси-сервера (Forward Proxy Server), существуют также обратный прокси-сервер (Reverse Proxy Server), цель которого заключается в повышении безопасности и производительности, а также в управлении трафиком путем обработки запросов от клиентов и распределения их между несколькими внутренними сервисами. Также обратный прокси-сервер используется для сокрытия реального IP-адреса сервиса, тем самым повышая уровень безопасности. Сегодня мы рассмотрим программный продукт Nginx Proxy Manager, который можно использовать как reverse proxy (обратный прокси) для веб-приложений.
Что такое Nginx Proxy Manager
Nginx Proxy Manager — это обратный прокси-сервер (reverse proxy) с поддержкой графического интерфейса, разработанный для упрощения настройки и управлением обратными прокси на основе веб-сервера Nginx. Сервис используется для организации доступа к различным веб-приложениям через единую точку входа (в качестве единой точки входа может выступать, например, доменное имя или IP-адрес) с дальнейшей маршрутизацией до конечного приложения.
Главная особенность Nginx Proxy Manager заключается в отсутствии необходимости вручную редактировать конфигурационные файлы. Вместо этого вся настройка осуществляется через встроенный веб-интерфейс. Проект является полностью бесплатным и не обладает дополнительными платными тарифами, а также имеет открытый исходный код, доступный на платформе GitHub.
Отличие Nginx Proxy Manager от Nginx
Несмотря на наличие слова «Nginx» в название программы, Nginx Proxy Manager не имеет прямого отношения к компании NGINX Inc., которая является коммерческим разработчиком оригинального веб-сервера Nginx. Однако Nginx Proxy Manager основан на оригинальном исходном коде Nginx и использует его в качестве основы для своей работы.
Также NPM обладает расширенным функционалом, который включает в себя следующие особенности:
- Встроенный веб-интерфейс.
- Быстрая и удобная настройка переадресации доменов, использование встроенной функции Streams для настройки потоков данных, проходящих через протоколы TCP/UDP, а также кастомизация страниц с кодом ошибки 404.
- Наличие встроенного сервиса Let's Encrypt для выпуска бесплатных SSL сертификатов. Также сохраняется возможность использования самоподписанных сертификатов и сертификатов, выпущенных сторонними удостоверяющими центрами.
- Функционал по обеспечению безопасности, включающий в себя списки доступов (Access-control list) и HTTP-аутентификацию (HTTP Basic Auth).
- Управление пользователями, настройка прав доступа и аудит лог файлов.
Предварительные требования
Чтобы установить и использовать Nginx Proxy Manager, нам понадобится следующее:
-
Один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. В данной статье в качестве примера мы будем использовать дистрибутив Ubuntu 24.04.
Сервер должен соответствовать следующим требованиям:
- Минимум 1 ГБ оперативной памяти. Данный объем подойдет только для тестирования Nginx Proxy Manager и не предназначен для решения реальных задач. Для production-решений необходимо минимум 2 ГБ оперативной памяти. При тестировании конфигурации на собственном устройстве будет достаточно менее 1 ГБ оперативной памяти.
-
Минимум 1-ядерный процессор для тестирования конфигурации. Для выполнения реальных задач рекомендуется 4-ядерный процессор.
Сервер можно создать в панели управления в разделе «Облачные серверы». В процессе:
-
Выберите регион с минимальным пингом для быстрой передачи данных.
-
Выберите конфигурацию, достаточную для ваших задач. В рамках данной статьи для запуска и тестового использования Nginx Proxy Manager без реальной нагрузки будет достаточно конфигурации с одноядерном процессором, 1 ГБ оперативной памяти и 15 ГБ места на NVMe-диске.
Остальные параметры можно оставить без изменений.
Сервер будет запущен через пару минут, и вы сможете найти IP-адрес, логин и пароль для подключения на Дашборде сервера.
Облачные серверы
по всему миру с почасовой оплатой.
Подготовка сервера
Настройка Firewall
На сервере должны быть открыты порты 80, 81 и 443, которые Nginx Proxy Manager использует в своей работе. По умолчанию в дистрибутиве Ubuntu используется утилита UFW. Необходимо открыть данные порты, используя следующие команды:
Для протокола TCP:
Для протокола UDP:
Либо UFW можно выключить совсем, если он не используется:
Если вместо UFW используется программа iptables, то команды будут следующими:
Для входящих соединений по протоколу TCP:
Для входящих соединений по протоколу UDP:
Для исходящих соединений по протоколу TCP:
Для исходящих соединений по протоколу UDP:
Установка Docker и Docker Compose
Для работы с Nginx Proxy Manager нам потребуются Docker и Docker Compose, которые мы установим из официального репозитория Docker. Для этого выполняем следующие шаги:
- Создаем директорию
/etc/apt/keyringsс правами доступа 0755:
- При помощи утилиты
curlскачиваем GPG-ключ от официального репозитория Docker и перемещаем его в ранее созданную директорию/etc/apt/keyrings:
- Выставляем права на чтение для скачанного ключа:
- Добавляем адрес официального репозитория Docker в систему:
- Обновляем индекс репозиториев и устанавливаем пакеты
dockerиdocker-compose:
- Проверьте успешность установки.
Для проверки установки Docker:

Для проверки установки Docker Compose:

Если обе команды вернули версии программ, то Docker и Docker Compose успешно установлены в системе.
Подготовка тестовых приложений
В качестве теста мы будем использовать три контейнера Docker с веб-сервером Nginx. У каждого запущенного контейнера свой уникальный порт, при обращении к которому будет отображаться своя фраза. Цель будет заключаться в следующем: используя Nginx Proxy Manager, «опубликовать» все три сервиса, чтобы они были доступны пользователям в рамках частной сети по доменным именам и возвращали пользователям свой уникальный контент. Для этого нам понадобится три доменных имени. Так как все действия производятся сугубо для тестирования, мы воспользуемся локальными доменами, а именно пропишем тестовые доменные в файле /etc/hosts.
По умолчанию, Docker создает свою подсеть с адресом 172.17.0.1:

- Открываем на редактирование при помощи любого текстового редактора файл
hosts:
И прописываем три тестовых домена, используя в качестве IP-адреса адрес интерфейса Docker — docker0.

Сохраняем изменения и выходим из файла.
- Далее создаем новую директорию, где будет храниться конфигурация для трех контейнеров в виде docker-compose-файла, и сразу переходим в нее:
- Создаем файл с именем
docker-compose.yml:
Используем следующее содержимое:

Сохраняем изменения и выходим из файла.
- Для создания контейнеров используем команду:
- Убедимся, что все три контейнера успешно запущены, используя команду:

Также проверим что все три приложения возвращаю в ответе свою фразу. Для этого используем команду curl с указанием IP-адреса сервера и порта контейнера:

Все три контейнера возвращают свои уникальные ответы. На этом подготовка тестовых приложений завершена.
Запуск и настройка Nginx Proxy Manager
Далее мы подробно рассмотрим процесс запуска и настройки Nginx Proxy Manager.
Запуск базовой конфигурации
Для начала рассмотрим базовый запуск программы, используя минимальный набор параметров.
- Создаем новую директорию для проекта и переходим в нее:
- Внутри директории создаем новый файл с именем
docker-compose.yml:
И используем следующую конфигурацию:

Сохраняем изменения и выходим из файла.
- Для запуска воспользуемся командой:

При первом запуске дожидаемся процесса скачивания образа. При успешном завершении процесса команда сообщит о том, что контейнер был запущен:

По итогу у нас будет запущен один контейнер с Nginx Proxy Manager, у которого проброшены порты 80, 81 и 443.
На этом процесс запуска успешно завершен. Далее мы рассмотрим настройку Nginx Proxy Manager для трех веб-приложений, запущенных в контейнерах Docker.
Первоначальная настройка Nginx Proxy Manager
Ранее мы упоминали, что настройка Nginx Proxy Manager осуществляется исключительно через веб-интерфейс. Веб-консоль доступна на 81 порту. Открываем браузер и переходим по IP-адресу сервера, используя порт 81:

Логин (Email) и пароль по умолчанию следующие:
- Email: admin@example.com
- Password: changeme
При первом входе программа предложит поменять данные стандартного пользователя. Имя пользователя и псевдоним (nickname) можно поменять по желанию, однако адрес электронный почты надо обязательно сменить со стандартного на другой:

Далее система предложит изменить пароль. Для этого сначала необходимо ввести стандартный пароль, далее новый и повторить его:

После этого отобразится главная страница Nginx Proxy Manager:

Настройка и использование Nginx Proxy Manager
Настроим схему работы для трех запущенных приложений, при которой к каждому сервису можно обратиться по доменному имени и получить уникальный ответ от каждого приложения.
- В веб-интерфейсе Nginx Proxy Manager переходим в раздел Proxy Hosts:

Далее нажимаем на кнопку Add Proxy Host:

- Далее:
- В поле Domain name вводим доменное имя, по которому будет доступно приложение.
- В поле Forward Hostname / IP вводим IP адрес контейнера (в нашем случае это внутренний IP-адрес интерфейса Docker).
- В разделе Forward Port необходимо указать порт контейнера, который «слушает» сервис.

Для сохранения конфигурации используем кнопку Save.
- Для добавления нового прокси-хоста нажимаем на кнопку Add Proxy Host, которая располагается справа сверху:

- По аналогии добавляем второе приложение:

И третье:

В итоге у нас будут добавлены три приложения:

- После того как все приложения будут добавлены, возвращаемся на сервер и при помощи утилиты
curlотправляем запрос на каждый из доменных имен:

По итогу мы получили уникальный ответ от каждого приложения.
Подключение MySQL/MariaDB
По умолчанию для хранения конфигурации и данных Nginx Proxy Manager использует встраиваемую СУБД SQLite. Однако при желании SQLite можно поменять на MySQL или на MariaDB. В качестве минимально поддерживаемых версий заявлены следующие:
- MySQL версии 5.7.8 и выше
- MariaDB версии 10.2.7 и выше
Ниже приведен пример использования конфигурации с СУБД MySQL/MariaDB:
В качестве переменных окружения используются следующие:
DB_MYSQL_HOST— Адрес сервера, на котором запущена база данных.DB_MYSQL_PORT— Номер порта, через который осуществляется подключение к базе данных.DB_MYSQL_USER— Имя пользователя, используемое для аутентификации в базе данных.DB_MYSQL_PASSWORD— Пароль пользователя, из-под которого осуществляется подключение к базе данных.DB_MYSQL_NAME— Название базы данных, к которой производиться подключение.MYSQL_ROOT_PASSWORD— Пароль пользователя root в MySQL.MYSQL_DATABASE— Название базы данных, которая будет автоматически создана при запуске MySQL.MYSQL_USER— Имя дополнительного пользователя, из-под имени которого будет запущена база данных.MYSQL_PASSWORD— Пароль для пользователя, указанного в переменной MYSQL_USER.MARIADB_AUTO_UPGRADE— Параметр, отвечающий за необходимость автоматического обновления схемы базы данных MariaDB до последней версии при запуске.
Все значения переменных, перечисленных выше, можно поменять в соответствии с вашими требованиями.
Подключение PostgreSQL
Помимо MySQL и MariaDB, в официальной документации по Nginx Proxy Manager упоминается и PostgreSQL, но официально поддержка PostgreSQL не заявлена. Однако в тестовых целях PostgreSQL можно использовать. Для этого достаточно применить следующую конфигурацию:
Обратите внимание, что в качестве тега для образа postgres задан тег latest, что может привести к неработоспособности сервиса или содержать недоработки, а также проблемы, связанные с безопасностью.
Выгодные тарифы на облако в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Nginx Proxy Manager — это удобный инструмент для тех пользователей, кому необходимо настроить прокси-сервер без лишних неудобств. Сервис легко и быстро разворачивается в Docker, а вся настройка происходит исключительно в веб-интерфейсе, благодаря чему с программой сможет работать даже начинающий пользователь. Nginx Proxy Manager обладает самым необходимым функционалом, включающим управление доменами, настройку SSL, переадресацию и даже защиту доступа.
