Перейти к основному содержанию
Скидка 50% все планы, ограниченное время. Начиная от $2.48/mo
14 min left
Веб и бизнес-приложения

Nginx Proxy Manager на VPS: обзор и руководство по настройке

C Автор: Chike 14 мин чтения
Nginx Proxy Manager on a VPS routing one public IP to Dashboard, Media Server, Database, and Blog containers over HTTPS

У вас есть VPS с пятью-шестью службами Docker: Nextcloud, Uptime Kuma, блог на Ghost, возможно, Vaultwarden. Один публичный IP. И вы хотите, чтобы каждая была на своём поддомене с HTTPS, без ручного редактирования конфигурационных файлов Nginx при каждом добавлении контейнера. Именно эту задачу и призван решать Nginx Proxy Manager.

Это обзор и полная настройка Nginx Proxy Manager на VPS в одном руководстве. Nginx Proxy Manager (NPM) — это Docker-приложение, оборачивающее Nginx в веб-интерфейс: вы направляете поддомены на серверные контейнеры и запрашиваете сертификаты Let's Encrypt через панель управления вместо написания директив вручную. Руководство предназначено для тех, кто размещает сервисы самостоятельно, и системных администраторов, которые уже используют Docker и теперь нуждаются в обратном прокси, не требующем возни с nginx.conf.

К концу вы поймёте, подходит ли NPM для вашего случая, у вас будет он запущен с HTTPS на вашем VPS, и вы будете знать критерии перехода на Caddy или Traefik, когда NPM перестанет быть подходящим инструментом.

Кратко

  • Что такое NPM: Docker-приложение, которое добавляет веб-интерфейс поверх Nginx для управления прокси-хостами и автоматическим HTTPS от Let's Encrypt. Оно подходит тем, кто хочет графический интерфейс и держит небольшой, довольно статичный набор служб.
  • Компромиссы: конфигурация хранится в базе данных SQLite, поэтому её нельзя вести под контролем версий или сравнивать как конфигурационный файл. По состоянию на 12 июля 2026 года последний тегированный релиз подвержен CVE-2026-40519, поэтому для новых развёртываний следует дождаться тегированного релиза с исправлением. Его админ-панель на порту 81 — это главное, что нужно защитить.
  • Подбор ресурсов: Сам NPM в простое потребляет около 50 MB RAM. VPS с 1 GB — это практический минимум; 2 GB комфортны, когда вы добавляете за ним службы.
  • Когда переходить: оставайтесь на NPM для небольшого, в основном статичного набора, где важен графический интерфейс. Используйте Caddy, когда хотите конфигурацию как код и меньший расход ресурсов. Используйте Traefik, когда частые изменения контейнеров делают автообнаружение Docker более ценным, чем ручная регистрация хостов.

Что не охватывает это руководство

Это руководство по развёртыванию на VPS, а не справочник. Чтобы сохранить фокус, следующее выходит за рамки:

  • Глубокая настройка директив Nginx (пользовательские блоки location сверх того, что предоставляет интерфейс NPM).
  • Архитектура балансировки нагрузки в масштабе.
  • Сравнение ingress-решений Kubernetes.
  • NPM на Windows.
  • Путь через Cloudflare Tunnel для конфигураций без статического IP.

Что делает Nginx Proxy Manager (и где он вас подводит)

Nginx Proxy Manager taking one public IP and routing subdomains such as app, status, cloud, and vault.example.com to separate backend containers, each with SSL enabled

Nginx Proxy Manager — это Docker-приложение, которое под капотом запускает Nginx и добавляет сверху веб-панель. Вы создаёте прокси-хосты (поддомен к серверному контейнеру и порту) и запрашиваете сертификаты Let's Encrypt через формы вместо конфигурационных файлов. Оно подходит для небольшого, довольно статичного набора самостоятельно размещаемых приложений на одном VPS.

Помимо базовых функций, панель также управляет списками доступа и сырой пересылкой потоков TCP/UDP. Для набора приложений на одном VPS это настоящее удобство: вы добавляете контейнер, открываете панель, направляете на него поддомен, кликаете для выпуска сертификата. Готово.

Главный компромисс в том, что эталонная конфигурация NPM по умолчанию хранится в базе данных SQLite. NPM действительно генерирует читаемые файлы Nginx в /data/nginx/proxy_host/, но эти файлы — сгенерированные артефакты, а не декларативная конфигурация, которую вы редактируете и держите под контролем версий. Их можно изучить, но они не являются полноценной заменой Caddyfile или меткам Traefik, и надёжный способ воспроизвести развёртывание — восстановить тома данных и сертификатов NPM. Для небольшого статичного набора это может быть приемлемо. Для инфраструктурного рабочего процесса на основе Git это реальное ограничение.

По состоянию на 12 июля 2026 года последний тегированный релиз — это v2.15.1, опубликованный 3 июня 2026 года. Проект остаётся активным и распространяется под лицензией MIT, но его текущее положение с безопасностью требует важной оговорки: NVD перечисляет версии с 2.9.14 по 2.15.1 как подверженные CVE-2026-40519, уязвимости инъекции команд с аутентификацией, исправленной в коммите a5db5ed но пока не включённой в более новый тегированный релиз. Перед развёртыванием проверьте страницу релизов и используйте первую тегированную версию, которая содержит это исправление. NPM поддерживается, но v2.15.1 в настоящее время нельзя описывать как полностью пропатченный.

По расходу ресурсов NPM в простое потребляет примерно 50 MB RAM согласно сравнению обратных прокси от byte-guard. Это достаточно мало, чтобы NPM почти никогда не был тем, что нагружает ваш VPS. Нагружают его службы за ним.

Моё мнение: NPM — разумный выбор в 2026 году, если вам нужен графический интерфейс и вы держите небольшой набор Docker. Если вы живёте в контроле версий и хотите держать конфигурацию прокси в Git, посмотрите на Caddy. Решающий фактор — конфигурация на базе SQLite, а не какие-то проблемы с самим проксированием.

NPM жертвует переносимостью конфигурации ради графического интерфейса. Этот размен приемлем для небольшого статичного набора и раздражает при рабочем процессе на основе Git.

NPM против Caddy против Traefik: какой обратный прокси подходит вашему VPS

NPM, Caddy, and Traefik compared: NPM is a GUI for small static stacks at about 50 MB idle, Caddy is config-as-code for simple deployments at about 30 MB, and Traefik uses Docker auto-discovery for changing containers at about 80 MB

Три инструмента различаются по четырём осям, которые определяют выбор: как вы их настраиваете, как они обрабатывают HTTPS, как они масштабируются с числом служб и сколько RAM потребляют в простое. Вот сравнение.

ПараметрМенеджер прокси NginxCaddyTraefik
Модель конфигурацииВеб-интерфейс, хранение в SQLiteCaddyfile (текст, под контролем версий)Метки Docker / YAML
Автоматический HTTPSДа, запрос на каждый хост в интерфейсеДа, по умолчанию, без настройкиДа, требует настройки резолвера ACME
Автообнаружение DockerNoNoДа, через метки контейнеров
RAM в простое~50 MB~30 MB~80 MB
Лучше всего подходит дляПользователей графического интерфейса, небольших/статичных наборовКонфигурации как кода, минимального расхода ресурсовДинамических наборов Docker с частыми изменениями контейнеров

Показатели RAM в простое — это приблизительные наблюдения из одного сравнения 2026 года, а не фиксированные требования. Фактическое потребление зависит от версии образа, включённых функций, трафика и логирования.

Критерии перехода прямо вытекают из этой таблицы. Если вам нужна панель управления и вы держите небольшое число служб, которые редко меняются, NPM — правильный инструмент. Если вы предпочитаете конфигурацию как код, хотите минимальный расход ресурсов или цените у Caddy автоматическую выдачу и обновление HTTPS без настройки ACME, используйте Caddy. Сам я тянусь к Caddy при развёртывании одного сайта, потому что обработка SSL автоматическая, а Caddyfile короткий. Если вы часто добавляете, удаляете или переразвёртываете контейнеры, автообнаружение Traefik на основе меток избавляет вас от ручной регистрации каждого нового хоста.

Есть также чистый Nginx с Certbot, который некоторые администраторы предпочитают ради точного контроля или развёртываний без Docker. Certbot может автоматизировать обновление сертификатов, но маршрутизацией виртуальных хостов и конфигурацией Nginx вы по-прежнему управляете сами. Если ваша главная причина рассматривать NPM — избежать ручной настройки прокси, то чистый Nginx вряд ли подойдёт лучше.

Одно замечание по выбору: сравнение byte-guard называет Caddy самым лёгким вариантом в этом сравнении, и для новой конфигурации на одном хосте в 2026 году это разумный выбор. Caddy выигрывает в том, что легче NPM, но если вам нужен именно графический интерфейс, это не лучший выбор.

Для более глубокого сопоставления базовых движков см. сравнение Caddy и Nginx на VPS.

Предварительные условия: что вам понадобится

Перед развёртыванием подготовьте следующее. Это короткий список, но пропустите любой пункт — и шаг с сертификатом позже завершится ошибкой.

  • VPS с установленными Docker и Docker Compose (подойдёт Ubuntu 22.04 LTS или Debian 12).
  • Доменное имя с DNS-записью A (и AAAA, если вы используете IPv6), указывающей на публичный IP вашего VPS.
  • SSH-доступ к VPS.
  • Порты 80 и 443, открытые в интернет в вашем межсетевом экране.
  • Порт 81, доступный только вам, а не открытый публично (рассматривается в разделе о безопасности).

Настройка Nginx Proxy Manager на вашем VPS с помощью Docker Compose

Deploying Nginx Proxy Manager with Docker Compose: ports 80 and 443 public, the admin UI on port 81 bound to 127.0.0.1, and backend containers joined to a shared proxy Docker network

В этом разделе NPM развёртывается с помощью Docker Compose. Как только ваши DNS-записи начнут разрешаться на VPS, настройка самого контейнера будет быстрой, хотя распространение DNS и выпуск сертификата могут занять больше времени.

Настройка использует один файл Docker Compose и однократную команду для создания общей сети Docker. Создайте каталог, создайте сеть, добавьте приведённый ниже docker-compose.yml файл и поднимите контейнер.

Сначала создайте общую сеть Docker:

docker network create proxy

Затем создайте следующий docker-compose.yml :

# docker-compose.yml
services:
  npm:
    image: 'jc21/nginx-proxy-manager:<PATCHED_VERSION>'
    restart: unless-stopped
    ports:
      - '80:80'                 # public HTTP
      - '443:443'               # public HTTPS
      - '127.0.0.1:81:81'       # admin UI, reachable only from the VPS itself
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy
networks:
  proxy:
    external: true

Подключите каждый серверный контейнер, до которого NPM должен обращаться по имени службы, к той же внешней proxy сети. Это позволяет NPM разрешать контейнер по имени его службы без публикации порта серверного приложения на VPS.

Делайте резервную копию обоих ./data и ./letsencrypt перед обновлениями. Каталог данных содержит базу данных NPM и сгенерированную конфигурацию, а каталог Let's Encrypt содержит его сертификатный материал.

Несколько замечаний об этом файле. По умолчанию образ использует базу данных SQLite, хранящуюся в ./data томе. Это бэкенд по умолчанию, и он подходит для большинства развёртываний на одном VPS. Если вам нужна внешняя база данных, NPM поддерживает MariaDB/MySQL и PostgreSQL, что означает добавление службы базы данных и соответствующих переменных окружения. Для одного VPS SQLite по-прежнему остаётся самым простым вариантом по умолчанию, если только у вас нет явной причины вынести базу данных из тома данных. Политика restart: unless-stopped означает, что NPM снова поднимается, если VPS перезагружается, а именно этого и хочется для службы, которая стоит перед всем остальным.

Поднимите его и убедитесь, что он работает:

docker compose up -d
docker compose ps

Ожидаемый вывод: контейнер npm в состоянии Up, порты 80 и 443 отображены публично, а порт 81 привязан только к 127.0.0.1. Первый запуск занимает пару минут, пока NPM генерирует ключ JWT, инициализирует базу данных и создаёт пользователя-администратора по умолчанию. официальная документация по настройке описывает эту последовательность первого запуска.

Создайте SSH-туннель со своего локального компьютера, прежде чем открывать административный интерфейс:

ssh -L 8181:127.0.0.1:81 user@your-vps

Затем откройте http://127.0.0.1:8181 в браузере. На новой установке войдите с [email protected] и changeme, затем сразу замените стандартный email и пароль. Не делайте панель управления публично доступной, пока активны стандартные учётные данные.

После смены учётных данных администратора добавьте свой первый прокси-хост:

  1. В панели управления перейдите в Hosts, затем Proxy Hosts, затем Add Proxy Host.
  2. Задайте Domain Name на ваш поддомен (например, cloud.example.com).
  3. Задайте Forward Hostname / IP на имя серверного контейнера или IP, а Forward Port на порт, который он слушает.
  4. Сохраните. Прокси-хост появляется в списке, и трафик на этот поддомен теперь достигает вашего контейнера.

Если вы параллельно используете интерфейс управления Docker, применяется тот же шаблон: точно так же направьте поддомен на инструмент управления контейнерами и сделайте то же самое для стеком мониторинга Prometheus и Grafana который вы хотите разместить за прокси.

Настройка автоматического HTTPS для поддомена

Configuring automatic HTTPS in Nginx Proxy Manager: a DNS A record points the subdomain at the VPS, Let's Encrypt validates ownership over HTTP-01 on port 80 or DNS-01 for wildcards, and the certificate installs with Force SSL and HTTP/2 enabled

В этом разделе вы получите действительный, автоматически обновляемый сертификат Let's Encrypt для вашего поддомена. Предварительное условие, на котором люди спотыкаются: DNS-запись A для этого поддомена уже должна указывать на ваш VPS, а порт 80 должен быть доступен из интернета, поскольку Let's Encrypt проверяет домен, подключаясь к нему обратно.

После создания прокси-хоста запросите сертификат:

  1. Отредактируйте прокси-хост, откройте вкладку SSL .
  2. В разделе Сертификат SSL, выберите Request a new SSL Certificate.
  3. Включить Force SSL и HTTP/2 Support. Включайте HSTS только после того, как убедитесь, что HTTPS работает корректно, поскольку браузеры могут кэшировать политику и усложнить восстановление после ошибки в сертификате или конфигурации прокси.
  4. Согласитесь с условиями Let's Encrypt и сохраните.

По умолчанию NPM использует проверку HTTP-01 для имён без подстановочного знака, проверяя каждое запрошенное имя хоста по порту 80. Сертификат может содержать несколько имён без подстановочного знака, но HTTP-01 не может выпускать сертификаты с подстановочным знаком. Имена с подстановочным знаком, такие как *.example.com требуют проверки DNS-01 с поддерживаемым DNS-провайдером. Для обычной конфигурации «один поддомен на службу» HTTP-01 — это всё, что нужно, и обновления происходят автоматически.

Если запрос сертификата завершается ошибкой, сначала проверьте порт 80. Частые причины включают недоступный порт 80, неверное правило облачного межсетевого экрана или группы безопасности и DNS, распространение которого ещё не завершилось. Let's Encrypt не может проверить домен, до которого не может достучаться.

Защита админ-панели NPM на VPS

Securing the Nginx Proxy Manager admin panel: public access to port 81 is blocked while admin access is allowed only through an SSH tunnel or private VPN to 127.0.0.1:81, with two-factor authentication and a patched version

Административный интерфейс на порту 81 — это главная уязвимая точка развёртывания NPM, и этот раздел её защищает. Это эксплуатационное усиление защиты, а не аудит безопасности: три вещи, сделанные один раз, и профиль рисков резко снижается.

Во-первых, и это самое важное, держите порт 81 привязанным к 127.0.0.1 как показано в файле Docker Compose. Обращайтесь к панели управления через SSH-туннель, описанный ранее. Если вам нужен постоянный удалённый доступ, сделайте административный интерфейс доступным только через приватный VPN. Не публикуйте порт 81 на публичном IP VPS.

Во-вторых, включите двухфакторную аутентификацию TOTP для вашей учётной записи администратора. NPM добавил 2FA на основе TOTP в версии 2.13.6, поэтому любая актуальная установка её имеет. Включите её.

В-третьих, держите NPM обновлённым и проверяйте точный релиз, а не предполагайте, что тег latest безопасен. CVE-2026-40519 затрагивает версии с 2.9.14 по 2.15.1 и может позволить удалённое выполнение кода с аутентификацией через вредоносные учётные данные DNS-провайдера. CVE-2026-50892 затрагивает v2.14.0 и может позволить аутентифицированному злоумышленнику получить материал закрытого ключа Let's Encrypt. Более ранняя проблема, CVE-2025-50579, затрагивала v2.12.3 через уязвимость CORS, которая могла раскрыть токены JWT. Практическое правило простое: держите порт 81 приватным, включите двухфакторную аутентификацию, зафиксируйте известную пропатченную версию и изучите бюллетени безопасности перед обновлением.

Порт 81 остаётся приватным, а NPM остаётся обновлённым. Сделайте эти две вещи, и основными известными рисками станет гораздо проще управлять для обычной конфигурации на одном VPS.

Подбор ресурсов VPS для Nginx Proxy Manager

Сам NPM лёгкий; вопрос подбора ресурсов на самом деле про NPM плюс службы, стоящие за ним. Расход прокси в простое редко становится ограничением. Экземпляр Nextcloud или блог на Ghost будут использовать больше ресурсов, чем сам прокси.

Вот как уровни распределяются на практике:

  • Минимальный практический уровень: 1 GB RAM, 1 vCPU и 10 GB хранилища. Один стороннее руководство по подбору ресурсов использует тот же базовый уровень, но рассматривайте его как ориентир для планирования, а не как официальное требование NPM. Его достаточно для NPM, операционной системы и нескольких лёгких служб, но он оставляет ограниченный запас.
  • Комфортно: 2 GB RAM, 1 vCPU, 20 GB хранилища. NPM плюс от трёх до пяти служб с запасом. Это оптимальная точка для большинства тех, кто размещает сервисы самостоятельно.
  • Уровень повыше: 4 GB RAM, 2 vCPU. Для восьми-двенадцати служб или конфигурации со значимым трафиком, где вам нужен запас CPU для завершения TLS.

Величина, на которую вы ориентируетесь при подборе, — это сумма проксируемых приложений, а не NPM. Сложите объёмы RAM служб, которые вы намерены запустить, добавьте сверху небольшие накладные расходы прокси в простое и выберите уровень выше этого с запасом.

Подбор сервера — это простая часть. Запуск NPM всё ещё означает подготовку VPS, установку Docker, загрузку образа и прохождение настройки первого запуска. Если вы предпочли бы пропустить шаги подготовки, в маркетплейсе Cloudzy есть развёртывание в один клик развёртывание Nginx Proxy Manager на VPS с NVMe. Оно поднимает контейнер на новом сервере, так что вы сразу переходите к панели управления и своему первому прокси-хосту. В любом случае вы ориентируетесь на приведённые выше уровни ресурсов.

Часто задаваемые вопросы

В чём разница между Nginx и Nginx Proxy Manager?

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

Стоит ли по-прежнему использовать Nginx Proxy Manager в 2026 году?

Да, для пользователей, предпочитающих графический интерфейс и держащих небольшой набор Docker, но только после того, как вы убедитесь, что развёртываемый образ включает последние исправления безопасности. По состоянию на 12 июля 2026 года v2.15.1 — это последний тегированный релиз, и NVD перечисляет его как подверженный CVE-2026-40519. Если вы предпочитаете конфигурацию как код, Caddy остаётся более подходящим; конфигурация NPM на базе SQLite — это его главное эксплуатационное ограничение.

Каков минимальный объём RAM для Nginx Proxy Manager?

Сам NPM в простое потребляет примерно 50 MB RAM. VPS с 1 GB — это практический минимум, которого достаточно для NPM плюс пары лёгких служб. 2 GB комфортны, когда вы добавляете больше проксируемых приложений. Реальные требования к RAM определяются службами за NPM, а не самим NPM.

Стоит ли открывать порт 81 в интернет?

Нет. Держите порт 81 привязанным к localhost и обращайтесь к нему через SSH-туннель или сделайте его доступным только через приватный VPN. Не публикуйте административный интерфейс на публичном IP VPS.

Можно ли запустить Nginx Proxy Manager без Docker?

Нет. NPM распространяется и спроектирован как контейнер Docker, и поддерживаемой установки без Docker не существует. Если вы не можете или не хотите запускать Docker, используйте вместо этого чистый Nginx с Certbot или Caddy как единый бинарный файл.

Поддерживает ли Nginx Proxy Manager сертификаты с подстановочным знаком?

Да, через проверку DNS-01 с настроенным поддерживаемым DNS-провайдером. Стандартные сертификаты для одного имени хоста используют проверку HTTP-01 по порту 80; сертификаты с подстановочным знаком (*.example.com) требуют DNS-01, поскольку центр сертификации проверяет контроль путём записи DNS-записи, а не обращения к одному хосту.

Поделиться

Ещё в блоге

Читайте дальше.

Готовы к развёртыванию? От $2,48/мес.

Независимое облако с 2008 года. AMD EPYC, NVMe, 40 Gbps. Возврат денег в течение 14 дней.