Nginx Proxy Manager — это Nginx с веб-панелью: вы указываете домен и адрес сервиса, а он сам настраивает обратный прокси и получает бесплатный SSL-сертификат Let’s Encrypt. Так на одном сервере с одним IP живут сразу несколько сайтов и сервисов, каждый на своём поддомене, и никто не пишет конфиги Nginx руками. Разберём установку Nginx Proxy Manager через Docker Compose, первый вход, добавление прокси-хоста и сертификата и частые ошибки. Все команды и выводы ниже — с тестового запуска версии 2.16.0 26 сентября 2026 года.

- Обратный прокси: что это и зачем он нужен
- Что нужно заранее
- Установка Nginx Proxy Manager в Docker Compose
- Порт 81: панель управления
- Первый вход: логин и пароль
- Настройка Nginx Proxy Manager: добавляем прокси-хост
- SSL в Nginx Proxy Manager: сертификат Let’s Encrypt
- Что ещё умеет Nginx Proxy Manager
- Как обновить Nginx Proxy Manager
- Частые ошибки
Обратный прокси: что это и зачем он нужен
Порты 80 и 443 на сервере одни. Если на нём работают сайт, мониторинг и фотоархив, наружу их можно выставить только через один веб-сервер, который смотрит на имя домена в запросе и передаёт запрос нужному сервису. Это и есть обратный прокси сервер, по-английски reverse proxy. Nginx — самый популярный вариант, и Nginx Proxy Manager как раз даёт настроить nginx reverse proxy без правки конфигов:
status.example.com→ контейнер мониторинга на порту 3001;photo.example.com→ фотоархив на порту 2283;example.com→ сайт.
Заодно прокси берёт на себя HTTPS: сертификат нужен только ему, а сами сервисы внутри сервера работают по обычному HTTP. В чистом Nginx это десяток строк конфига на каждый сервис плюс certbot. В Nginx Proxy Manager — форма из трёх полей.
Что нужно заранее
- Сервер с Linux и Docker — VPS или домашний. Сам Nginx Proxy Manager лёгкий: в нашем тесте контейнер занимал около 87 МБ памяти. Как подготовить VPS — в статье настройка VPS: SSH-ключ, ufw и fail2ban.
- Docker и Docker Compose — установка описана в статье Docker Compose для начинающих.
- Домен с A-записями на IP сервера: для каждого поддомена своя запись или одна wildcard-запись
*.example.com. Как их добавить — в статье DNS-записи домена. - Свободные порты 80 и 443. Если на сервере уже стоит Nginx или Apache, их придётся остановить — порты займёт Nginx Proxy Manager.
Установка Nginx Proxy Manager в Docker Compose
Официальная инструкция — один файл docker-compose.yml. Мы сделали в нём три изменения: наш часовой пояс, закрытую снаружи панель и общую Docker-сеть для сервисов (о ней ниже).
sudo mkdir -p /srv/npm && cd /srv/npm docker network create proxy nano docker-compose.yml
services:
app:
image: 'jc21/nginx-proxy-manager:2.16.0'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '127.0.0.1:81:81' # панель только с самого сервера
environment:
TZ: "Europe/Moscow"
DISABLE_IPV6: 'true' # только если на сервере нет IPv6
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
default:
external: true
name: proxydocker compose up -d docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS npm-app-1 jc21/nginx-proxy-manager:2.16.0 "/init" app 43 seconds ago Up 40 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 127.0.0.1:81->81/tcp
Настройки, база SQLite и сертификаты лежат в папках data и letsencrypt рядом с файлом — их и нужно копировать в резервную копию. Версию лучше указывать явно, а не latest: так обновление произойдёт тогда, когда вы решите.
Порт 81: панель управления
В официальном примере он открыт всему интернету, а Docker обходит правила ufw. Мы привязали панель к 127.0.0.1 и заходим в неё через SSH-туннель:
ssh -L 8181:127.0.0.1:81 user@ip-сервера # затем в браузере: http://127.0.0.1:8181
Для домашнего сервера вместо 127.0.0.1 можно указать его адрес в локальной сети, например 192.168.1.10:81:81.
Первый вход: логин и пароль
Во многих старых инструкциях написано, что вход — admin@example.com с паролем changeme. В актуальных версиях это не так: при первом открытии панели Nginx Proxy Manager сразу просит создать учётную запись администратора — имя, почту и пароль. Проверить, что начальная настройка ещё не пройдена, можно через API:
curl -s http://127.0.0.1:81/api/
{"status":"OK","setup":false,"version":{"major":2,"minor":16,"revision":0}}"setup":false означает, что администратора ещё нет. Не оставляйте панель в таком виде открытой в интернет: первый, кто её откроет, и станет админом. Интерфейс по умолчанию английский, язык переключается значком глобуса в правом верхнем углу.
Настройка Nginx Proxy Manager: добавляем прокси-хост
Для примера поднимем рядом два сервиса — Uptime Kuma и тестовый whoami, который просто показывает пришедший запрос. Главное — та же сеть proxy, а портов наружу нет вообще:
services:
whoami:
image: traefik/whoami:v1.11
restart: unless-stopped
kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
volumes:
- ./kuma:/app/data
networks:
default:
external: true
name: proxyВнутри общей Docker-сети контейнеры находят друг друга по имени сервиса, поэтому в Nginx Proxy Manager адрес указывается как kuma, а не IP. Этот приём советуют и сами разработчики в расширенной настройке: сервисам не нужно публиковать порты, и мимо прокси до них не достучаться.
Дальше в панели: Hosts → Proxy Hosts → Add Proxy Host.

| Поле | Что указать |
|---|---|
| Domain Names | Домен или поддомен: status.example.com |
| Scheme | http — внутри сервера шифрование не нужно |
| Forward Hostname / IP | Имя контейнера (kuma) или IP, если сервис не в Docker |
| Forward Port | Порт внутри контейнера: у Uptime Kuma 3001 |
| Block Common Exploits | Включить: отсекает часть типовых атак |
| Websockets Support | Включить, если сервис работает «вживую» — Uptime Kuma, Home Assistant, чаты |
Сохраняем — и хост сразу работает. Проверка с самого сервера, без DNS, через подмену заголовка Host:
curl -s -H 'Host: whoami.example.com' http://127.0.0.1/
Hostname: dfcbca021729 IP: 127.0.0.1 IP: 172.19.0.3 RemoteAddr: 172.19.0.2:53726 GET / HTTP/1.1 Host: whoami.example.com User-Agent: curl/8.5.0 Accept: */* X-Forwarded-For: 172.19.0.1 X-Forwarded-Proto: http X-Forwarded-Scheme: http X-Real-Ip: 172.19.0.1
Видно, что запрос пришёл в контейнер whoami через прокси (RemoteAddr — адрес Nginx Proxy Manager в сети Docker), а настоящий адрес клиента передан в заголовках X-Forwarded-For и X-Real-Ip. На запрос с неизвестным доменом Nginx Proxy Manager отдаёт свою заглушку «Congratulations!» — её можно заменить на 404 или редирект в Settings → Default Site.
SSL в Nginx Proxy Manager: сертификат Let’s Encrypt
На вкладке SSL того же окна выберите Request a new Certificate и включите Force SSL — тогда все HTTP-запросы будут перенаправляться на HTTPS. Сертификат выпускается за несколько секунд и продлевается сам: Nginx Proxy Manager проверяет сертификаты с истекающим сроком (в логе при старте видно Renewing SSL certs expiring within 30 days).
Чтобы Let’s Encrypt выдал сертификат, должны выполняться два условия:
- A-запись домена уже указывает на IP сервера (после изменения DNS может понадобиться подождать);
- порт 80 доступен из интернета — через него Let’s Encrypt проверяет, что домен ваш.
Если порт 80 закрыт (частая история с домашним интернетом) или нужен wildcard-сертификат на *.example.com, используйте проверку через DNS: Nginx Proxy Manager сам ставит плагин certbot для вашего DNS-провайдера и создаёт проверочную TXT-запись через его API. Список провайдеров и оговорки — на странице Certbot в документации. Что вообще такое бесплатный сертификат и чем он отличается от платного — в статье бесплатный SSL-сертификат.
Что ещё умеет Nginx Proxy Manager
- Redirection Hosts — перенаправление домена целиком, например
www.example.com→example.com. - Streams — проброс TCP/UDP-портов, не HTTP: например, для игрового сервера. Порты для них нужно добавить в
portsв docker-compose.yml. - 404 Hosts — домен, который всегда отвечает «не найдено».
- Access Lists — доступ по паролю или только с определённых IP. Удобно для панелей, которым незачем быть публичными.
- Custom Locations и вкладка с шестерёнкой — свои куски конфига Nginx для тех, кому формы мало.
- Users и Audit Logs — несколько администраторов с разными правами и журнал их действий.
Как обновить Nginx Proxy Manager
Меняете версию в image: на новую и выполняете:
cd /srv/npm docker compose pull docker compose up -d
Базу Nginx Proxy Manager обновляет сам. Перед обновлением прочитайте заметки к новой версии: например, начиная с 2.14 не поддерживаются 32-битные ARM (armv7) — для старых Raspberry Pi остаётся только 2.13.7.
Частые ошибки
- Контейнер запущен, но панель не открывается, в логе по кругу
nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol). Мы поймали это на тестовом сервере без IPv6: Nginx пытается слушать IPv6-адрес. Помогает переменнаяDISABLE_IPV6: 'true'иdocker compose up -d --force-recreate. - Порт 80 или 443 уже занят.
docker compose upзавершится ошибкойaddress already in use. Посмотреть, кто занял:sudo ss -tlnp | grep -E ':80|:443'. - 502 Bad Gateway. Прокси не может достучаться до сервиса: контейнер не в той же Docker-сети, неверное имя или указан внешний порт вместо внутреннего. Проверьте
docker network inspect proxy. Как читать лог при 502 — в статье ошибка 500 и 502 Bad Gateway. - Сертификат не выпускается. Домен ещё не указывает на сервер, закрыт порт 80 или провайдер режет входящие соединения. Узнать, куда смотрит домен, — в статье как узнать IP сайта.
- Не входит в панель после включения Access List с паролем. Это описано в FAQ: два входа по паролю (Access List и сам сервис) конфликтуют в заголовке Authorization. Оставьте один из них.
- Сервисы опубликованы и напрямую. Если у контейнера остался
ports: - 3001:3001, он доступен в обход прокси и без HTTPS. Уберитеportsили привяжите к127.0.0.1.
Пример сервиса, который удобно открыть наружу через Nginx Proxy Manager, — чат с локальной нейросетью Open WebUI.
Документация: руководство Nginx Proxy Manager, установка, расширенная настройка, обновление, образ на Docker Hub, типы проверок Let’s Encrypt. Проверено 26 сентября 2026 года.








