Краткое содержание: В 2026 году, если ваши собственные сервисы всё ещё доступны по «голым»
IP:порт, они легко станут целью автоматических скриптов для сканирования и брутфорса. В статье подробно разбирается развёртывание Nginx Proxy Manager (NPM) через Docker Compose. От выбора хост-узла для предотвращения OOM и настройки внутренней маршрутизации во избежание ошибок 502, до нюансов автоматического продления wildcard SSL-сертификатов Cloudflare — пошаговое руководство по визуальному и надёжному управлению всеми веб-сервисами.
Честно говоря, этот инструмент обратного прокси я использую ежедневно при хостинге сайтов и настройке Docker. Это обязательный компонент в арсенале любого администратора VPS. В 2026 году доступ к собственным веб-сервисам (например, панели автоматизации, сетевые хранилища Alist, дашборды мониторинга) через IP:порт (вроде 192.168.1.1:8080) выглядит крайне непрофессионально. В публичной сети это равносильно работе без защиты: автоматические сканеры быстро обнаружат открытые порты и попытаются подобрать доступ.
Как специалист с многолетним опытом работы с VPS, предлагаю готовое решение: Nginx Proxy Manager (NPM). Он консолидирует все разрозненные сервисы на стандартных портах 80 и 443, назначает удобные поддомены и автоматически продлевает SSL-сертификаты Let’s Encrypt. Это подробное техническое руководство охватывает всё: от базового развёртывания до продвинутой настройки безопасности.
🧠 Почему в 2026 году для хостинга сайтов необходимо использовать NPM?
В классическом подходе к хостингу сайтов, если на одном сервере нужно запустить блог на WordPress и приватное облако NextCloud, приходится вручную писать сложные конфигурационные файлы Nginx (nginx.conf). Одна пропущенная точка с запятой — и сервис падает, выдавая ошибку 502 Bad Gateway.
Суть обратного прокси (Reverse Proxy) напоминает работу опытного администратора. Весь внешний трафик сначала поступает на порты 80 или 443. В зависимости от запрошенного домена (например, blog.vps1111.com), система автоматически перенаправляет запросы к соответствующим внутренним сервисам на скрытых портах.
Главное преимущество Nginx Proxy Manager — минималистичный веб-интерфейс. Больше не нужно писать конфигурации Nginx вручную. Достаточно указать домен и целевой порт в панели управления, и система автоматически сгенерирует оптимальные правила, а также запросит валидный SSL-сертификат. Для гиков, ценящих эффективность, это существенное упрощение рабочих процессов.
🖥️ Выбор оборудования: какие характеристики сервера подходят для NPM?
Сам NPM потребляет минимум ресурсов (около 100 МБ ОЗУ в фоне). Однако использование обратного прокси подразумевает запуск нескольких Docker-контейнеров. Чтобы новички не столкнулись с нехваткой памяти (OOM) и принудительным завершением процессов, ниже приведены базовые требования к VPS для роли «All-in-One» хост-узла и рекомендации по провайдерам на 2026 год:
🛠️ Практическое руководство: развёртывание NPM через Docker Compose (защищённая версия)
В 2026 году золотым стандартом развёртывания современных приложений является Docker Compose V2.
1. Установка официальной версии Docker
Подключитесь к свежему серверу на Debian/Ubuntu по SSH и выполните официальную команду установки (без лишних параметров):
curl -fsSL https://get.docker.com | sudo sh
2. Создание рабочей директории NPM и настройка конфигурации
mkdir -p /opt/npm && cd /opt/npm
nano compose.yaml
⚠️ Критическое предупреждение по безопасности: многие устаревшие руководства предлагают напрямую пробрасывать порт управления NPM 81 на 0.0.0.0:81. Это делает админ-панель доступной из интернета, что позволяет сканерам легко подобрать пароль.
Правильный подход: привяжите порт 81 к локальному адресу 127.0.0.1 или настройте белый список IP и доменов через Access List в панели NPM.
Скопируйте следующий код, соответствующий спецификации Compose V2 (обратите внимание: поле version больше не используется):
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
# Основные порты HTTP и HTTPS, должны быть открыты глобально
- '80:80'
- '443:443'
# Порт админки, рекомендуется привязать к localhost, доступ через SSH-туннель или обратный прокси
- '127.0.0.1:81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
3. Запуск сервиса
docker compose up -d
После запуска, если вы новичок и не умеете настраивать SSH-туннели, можно временно изменить 127.0.0.1:81:81 на 81:81. Однако после настройки домена для панели и включения Force SSL обязательно ограничьте доступ к ней в разделе Access List, разрешив подключение только с вашего реального IP-адреса!

- Учётная запись по умолчанию:
admin@example.com - Пароль по умолчанию:
changeme(при первом входе система потребует его сменить. Обязательно используйте надёжный пароль длиной от 12 символов.)
🔄 Основной рабочий процесс: как правильно настроить проксирование веб-сервисов и избежать ошибки 502
Предположим, на порту 8080 вашего VPS запущен новый сайт на WordPress. Вам нужно сделать его доступным по адресу blog.vps1111.com с поддержкой HTTPS (зелёный значок замка).
Шаг 1: Настройка DNS и нюансы работы с Cloudflare
В панели Cloudflare создайте A-запись, направив поддомен blog на публичный IP-адрес вашего VPS.
⚠️ Важный нюанс: на этапе первичной отладки и получения сертификата через NPM обязательно отключите проксирование Cloudflare (оранжевое облако), оставив режим «DNS Only». Если включить проксирование и строгий режим шифрования в CF до установки сертификата в NPM, Cloudflare откажется подключаться к серверу, что приведёт к циклическим ошибкам 522 или 521.
Шаг 2: Добавление прокси-хоста (Proxy Host) в панели NPM
- Перейдите в
Hosts->Proxy Hosts->Add Proxy Host. - Domain Names: укажите
blog.vps1111.com. - Forward Hostname / IP (руководство по предотвращению ошибки 502):
- Неправильно: указывать шлюз хост-узла
172.17.0.1(при перезапуске сети Docker адрес меняется, что гарантированно вызовет 502) или публичный IP (трафик будет делать лишний круг через интернет). - Правильный вариант 1: если WP и NPM находятся в одной сети Compose, укажите имя контейнера (например,
wordpress). - Правильный вариант 2: если WP запущен отдельно на порту 8080 хост-узла, используйте
host.docker.internal(требует настройки Docker) или узнайте реальный IP моста черезip addr show docker0. - Совет: проксируемый сервис (например, WP) должен прослушивать
0.0.0.0:8080. Если приложение слушает только127.0.0.1:8080, контейнер NPM не сможет подключиться к локальному интерфейсу хост-узла, что гарантированно приведёт к ошибке 502 Bad Gateway!
- Неправильно: указывать шлюз хост-узла
- Forward Port: укажите
8080.
Шаг 3: Быстрая установка SSL-сертификата
Перейдите на вкладку SSL в верхней части окна:
- Выберите Request a new SSL Certificate, отметьте Force SSL и HTTP/2 Support (обязательно для ускорения SEO).
- Укажите рабочий email и нажмите Save. Через ~15 секунд NPM выполнит HTTP-01 проверку и выпустит сертификат. Ваш сайт
https://blog.vps1111.comготов к работе!
🔐 Продвинутые настройки: DNS-валидация и wildcard-сертификаты
У Let’s Encrypt есть строгие лимиты: не более 50 сертификатов в неделю на один домен. Если у вас много поддоменов, оптимальное решение — запросить wildcard-сертификат (*.vps1111.com) через DNS Challenge.
- В меню
SSL Certificatesпанели NPM нажмитеAdd Certificate. - В поле Domain Names укажите
*.vps1111.comиvps1111.com. - Отметьте
Use a DNS Challenge, в качестве провайдера выберитеCloudflare. - ⚠️ Принцип минимальных привилегий: NPM запросит API Token от Cloudflare. Никогда не используйте глобальный ключ! Создайте в панели CF пользовательский токен с правами: Zone -> DNS -> Edit, ограничив доступ только целевым доменом. Это предотвратит захват других доменов в вашем аккаунте в случае взлома NPM.
С wildcard-сертификатом добавление новых внутренних сервисов займёт секунды: просто выберите готовый сертификат из выпадающего списка SSL при настройке.
❓ FAQ: Руководство по устранению типичных ошибок NPM
Q1: Почему при запросе SSL-сертификата постоянно появляется ошибка Internal Error или процесс завершается неудачей?
A: В 90% случаев причина в закрытом порту 80 на хост-узле. Для стандартной HTTP-01 проверки Let’s Encrypt требуется публичный доступ к порту 80 сервера для загрузки проверочного файла. Проверьте правила безопасности в панели вашего облачного провайдера (например, AWS, Hetzner, OVH) и локальный ufw, убедившись, что порты 80 и 443 открыты. Также убедитесь, что проксирование Cloudflare (оранжевое облако) отключено на этапе получения сертификата.
Q2: Почему NPM не продлил мой сертификат автоматически после истечения срока действия?
A: В NPM встроен автоматический планировщик Certbot. Ошибки продления обычно связаны с: 1. Изменением DNS-записей (домен больше не указывает на этот сервер); 2. Закрытием порта 80 на сервере; 3. Включением строгих правил WAF в Cloudflare, которые блокируют проверочные запросы.
Q3: Я проксировал панель Home Assistant или V2ray. Страница загружается, но данные не обновляются?
A: Сервисы, требующие постоянного соединения, сильно зависят от протокола WebSocket. Обязательно включите опцию “Websockets Support” в настройках Proxy Host, иначе Nginx будет принудительно разрывать соединение.
Q4: Что делать, если при запуске docker compose up -d возникает ошибка address already in use?
A: Сообщение Ports are not available: listen tcp 0.0.0.0:80: bind: address already in use означает, что порт 80 уже занят другим веб-сервером (например, системным Nginx, Apache или cPanel). Остановите и удалите старый сервис командой systemctl stop nginx, чтобы полностью освободить порты 80 и 443 для контейнера NPM.