<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Nginx Proxy Manager: настройка и использование

Александр Бархатов
Александр Бархатов
Технический писатель
21 марта 2025 г.
82
13 минут чтения
Средний рейтинг статьи: 5

При развертывании высоконагруженных веб-приложений часто приходится взаимодействовать с прокси-сервером. Помимо прямого прокси-сервера (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 решений необходимо минимум 4 ГБ оперативной памяти.

  • Минимум 1-ядерный процессор для тестирования конфигурации. Для выполнения реальных задач рекомендуется 4-ядерный процессор.

Сервер можно создать в панели управления в разделе «Облачные серверы». В процессе:

  • Выберите регион с минимальным пингом для быстрой передачи данных.

  • Выберите конфигурацию, достаточную для ваших задач. В рамках данной статьи для запуска и тестового использования Nginx Proxy Manager без реальной нагрузки будет достаточно конфигурации с одноядерном процессором, 1 ГБ оперативной памяти и 15 ГБ места на NVMe-диске. 

Остальные параметры можно оставить без изменений.

Сервер будет запущен через пару минут, и вы сможете найти IP-адрес, логин и пароль для подключения на Дашборде сервера.

cloud

Подготовка сервера

Настройка Firewall

На сервере должны быть открыты порты 80, 81 и 443, которые Nginx Proxy Manager использует в своей работе. По умолчанию в дистрибутиве Ubuntu используется утилита UFW. Необходимо открыть данные порты, используя следующие команды:

Для протокола TCP:

ufw allow 80,81,443/tcp

Для протокола UDP:

ufw allow 80,81,443/udp

Либо UFW можно выключить совсем, если он не используется:

systemctl stop ufw && systemctl disable ufw

Если вместо UFW используется программа iptables, то команды будут следующими:

Для входящих соединений по протоколу TCP:

iptables -A INPUT -p tcp --match multiport --dports 80,81,443 -j ACCEPT

Для входящих соединений по протоколу UDP:

iptables -A INPUT -p udp --match multiport --dports 80,81,443 -j ACCEPT

Для исходящих соединений по протоколу TCP:

iptables -A OUTPUT -p tcp --match multiport --dports 80,81,443 -j ACCEPT

Для исходящих соединений по протоколу UDP:

iptables -A OUTPUT -p udp --match multiport --dports 80,81,443 -j ACCEPT

Установка Docker и Docker Compose

Для работы с Nginx Proxy Manager нам потребуются Docker и Docker Compose, которые мы установим из официального репозитория Docker. Для этого выполняем следующие шаги:

  1. Создаем директорию /etc/apt/keyrings с правами доступа 0755:
sudo install -m 0755 -d /etc/apt/keyrings
  1. При помощи утилиты curl скачиваем GPG-ключ от официального репозитория Docker и перемещаем его в ранее созданную директорию /etc/apt/keyrings:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  1. Выставляем права на чтение для скачанного ключа:
chmod a+r /etc/apt/keyrings/docker.asc
  1. Добавляем адрес официального репозитория Docker в систему:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Обновляем индекс репозиториев и устанавливаем пакеты docker и docker-compose:
apt update && apt -y install docker-ce docker-compose-plugin
  1. Проверьте успешность установки.

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

docker --version

Image9

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

docker compose version

Image1

Если обе команды вернули версии программ, то Docker и Docker Compose успешно установлены в системе.

Подготовка тестовых приложений

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

По умолчанию, Docker создает свою подсеть с адресом 172.17.0.1:

Image15

  1. Открываем на редактирование при помощи любого текстового редактора файл hosts:
nano /etc/hosts

И прописываем три тестовых домена, используя в качестве IP-адреса адрес интерфейса Docker — docker0

172.17.0.1 nginx1.test.com
172.17.0.1 nginx2.test.com
172.17.0.1 nginx3.test.com

Image14

Сохраняем изменения и выходим из файла.

  1. Далее создаем новую директорию, где будет храниться конфигурация для трех контейнеров в виде docker-compose-файла, и сразу переходим в нее:
mkdir nginx-test-apps && cd nginx-test-apps
  1. Создаем файл с именем docker-compose.yml:
nano docker-compose.yml

Используем следующее содержимое:

services:
  nginx1:
    image: nginx:alpine3.21
    ports:
      - "8081:80"
    volumes:
      - ./nginx1/html:/usr/share/nginx/html
    command: ["/bin/sh", "-c", "echo 'Hello from nginx1!' > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]

  nginx2:
    image: nginx:alpine3.21
    ports:
      - "8082:80"
    volumes:
      - ./nginx2/html:/usr/share/nginx/html
    command: ["/bin/sh", "-c", "echo 'Hello from nginx2!' > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]

  nginx3:
    image: nginx:alpine3.21
    ports:
      - "8083:80"
    volumes:
      - ./nginx3/html:/usr/share/nginx/html
    command: ["/bin/sh", "-c", "echo 'Hello from nginx3!' > /usr/share/nginx/html/index.html && nginx -g 'daemon off;'"]

Image4

Сохраняем изменения и выходим из файла.

  1. Для создания контейнеров используем команду:
docker compose up -d
  1. Убедимся, что все три контейнера успешно запущены, используя команду:
docker ps

Image17

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

curl 172.17.0.1:8081
curl 172.17.0.1:8082
curl 172.17.0.1:8083

Image20

Все три контейнера возвращают свои уникальные ответы. На этом подготовка тестовых приложений завершена.

Запуск и настройка Nginx Proxy Manager

Далее мы подробно рассмотрим процесс запуска и настройки Nginx Proxy Manager.

Запуск базовой конфигурации

Для начала рассмотрим базовый запуск программы, используя минимальный набор параметров.

  1. Создаем новую директорию для проекта и переходим в нее:
mkdir nginx-proxy-manager-basic && cd nginx-proxy-manager-basic
  1. Внутри директории создаем новый файл с именем docker-compose.yml:
nano docker-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

Image13

Сохраняем изменения и выходим из файла.

  1. Для запуска воспользуемся командой:
docker compose up -d

Image16

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

Image3

По итогу у нас будет запущен один контейнер с Nginx Proxy Manager, у которого проброшены порты 80, 81 и 443.

На этом процесс запуска успешно завершен. Далее мы рассмотрим настройку Nginx Proxy Manager для трех веб-приложений, запущенных в контейнерах Docker.

Первоначальная настройка Nginx Proxy Manager

Ранее мы упоминали, что настройка Nginx Proxy Manager осуществляется исключительно через веб-интерфейс. Веб-консоль доступна на 81 порту. Открываем браузер и переходим по IP-адресу сервера, используя порт 81:

Image21

Логин (Email) и пароль по умолчанию следующие:

  • Email: admin@example.com
  • Password: changeme

При первом входе программа предложит поменять данные стандартного пользователя. Имя пользователя и псевдоним (nickname) можно поменять по желанию, однако адрес электронный почты надо обязательно сменить со стандартного на другой:

Image2

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

Image8

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

Image6

Настройка и использование Nginx Proxy Manager

Настроим схему работы для трех запущенных приложений, при которой к каждому сервису можно обратиться по доменному имени и получить уникальный ответ от каждого приложения.

  1. В веб-интерфейсе Nginx Proxy Manager переходим в раздел Proxy Hosts:

Image11

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

Image12

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

Image19

Для сохранения конфигурации используем кнопку Save.

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

Image7

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

Image10

И третье:

Image22

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

Image18

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

Image5

По итогу мы получили уникальный ответ от каждого приложения.

Подключение MySQL/MariaDB

По умолчанию для хранения конфигурации и данных Nginx Proxy Manager использует встраиваемую СУБД SQLite. Однако при желании SQLite можно поменять на MySQL или на MariaDB. В качестве минимально поддерживаемых версий заявлены следующие: 

  • MySQL версии 5.7.8 и выше
  • MariaDB версии 10.2.7 и выше

Ниже приведен пример использования конфигурации с СУБД MySQL/MariaDB:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
      MARIADB_AUTO_UPGRADE: '1'
    volumes:
      - ./mysql:/var/lib/mysql

В качестве переменных окружения используются следующие:

  • 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 можно использовать. Для этого достаточно применить следующую конфигурацию:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81'
    environment:
      DB_POSTGRES_HOST: 'db'
      DB_POSTGRES_PORT: '5432'
      DB_POSTGRES_USER: 'npm'
      DB_POSTGRES_PASSWORD: 'npmpass'
      DB_POSTGRES_NAME: 'npm'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: 'npm'
      POSTGRES_PASSWORD: 'npmpass'
      POSTGRES_DB: 'npm'
    volumes:
      - ./postgres:/var/lib/postgresql/data

Обратите внимание, что в качестве тега для образа postgres задан тег latest, что может привести к неработоспособности сервиса или содержать недоработки, а также проблемы, связанные с безопасностью. 

Выгодные тарифы на облако в Timeweb Cloud

Заключение

Nginx Proxy Manager — это удобный инструмент для тех пользователей, кому необходимо настроить прокси-сервер без лишних неудобств. Сервис легко и быстро разворачивается в Docker, а вся настройка происходит исключительно в веб-интерфейсе, благодаря чему с программой сможет работать даже начинающий пользователь. Nginx Proxy Manager обладает самым необходимым функционалом, включающим управление доменами, настройку SSL, переадресацию и даже защиту доступа.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
21 марта 2025 г.
82
13 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев