Nginx Proxy Manager: красивый reverse proxy с веб-интерфейсом для вашего умного дома

Пошаговая настройка Nginx Proxy Manager на Raspberry Pi. Красивый веб-интерфейс, SSL от Let's Encrypt и удобный доступ ко всем сервисам умного дома.
Приветствую всех, кто, как и я, любит собирать домашнюю инфраструктуру на одноплатниках! Если у вас, как и у меня, на полке шумит Raspberry Pi или Orange Pi, на котором крутится Home Assistant, пара самописных сервисов на ESP32, медиасервер и ещё что-нибудь эдакое, то вы наверняка сталкивались с проблемой: как ко всему этому удобно обращаться извне? Запоминать разные порты (192.168.1.100:8123, 192.168.1.100:8086, 192.168.1.100:3000) — неудобно. А хочется красивых адресов вроде hass.myhome.net или grafana.myhome.net. Именно здесь на помощь приходит reverse proxy (обратный прокси).
Сегодня я расскажу об одном из самых элегантных решений для этой задачи — Nginx Proxy Manager (NPM). Это не просто обёртка для мощного веб-сервера Nginx, а полноценный инструмент с дружелюбным веб-интерфейсом, который избавит вас от правки конфигов вручную и запоминания сложных синтаксисов. Всё управляется через браузер!
Зачем мне это? Простые сценарии из жизни
Представьте, что вы настроили Home Assistant для управления своим умным домом. Он работает на порту 8123. У вас также есть самописная панель мониторинга на Node-RED (порт 1880) и, возможно, система логирования. С Nginx Proxy Manager вы сможете:
* Объединить доступ ко всем сервисам под одним доменом: hass.myhome.net, nodered.myhome.net.
* Выдавать валидные SSL-сертификаты Let's Encrypt для всех сервисов одним кликом, чтобы в браузере был красивый замочек и безопасное HTTPS-соединение.
* Организовать безопасный доступ извне только к прокси, не открывая кучу портов на роутере для каждого сервиса.
* Добавлять простую HTTP-базовую аутентификацию к тем сервисам, у которых её нет из коробки.
И всё это без единого правленного вручную конфига Nginx. Звучит заманчиво? Тогда поехали!
Установка Nginx Proxy Manager: Docker — наш лучший друг
NPM распространяется как Docker-образ, что делает установку невероятно простой и чистой. Неважно, используете вы Raspberry Pi OS, DietPi или Ubuntu — шаги будут одинаковыми. Я буду показывать на примере своего основного сервера на Raspberry Pi 4, но это работает везде, где есть Docker.
Шаг 1: Подготовка системы и установка Docker
Если Docker у вас ещё не установлен, это делается одной командой. Я предпочитаю официальный скрипт для удобства.
# Скачиваем и запускаем официальный скрипт установки Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Добавляем текущего пользователя в группу docker, чтобы не писать sudo перед каждой командой
sudo usermod -aG docker $USER
Важно: После добавления пользователя в группу нужно выйти из системы и зайти заново (или перезапустить сессию SSH), чтобы изменения вступили в силу.
Проверим, что Docker установился корректно:
docker --version
# Должны увидеть что-то вроде: Docker version 24.0.7, build afdd53b
Шаг 2: Запуск Nginx Proxy Manager в Docker
Мы будем использовать docker-compose — это удобный способ описать настройки контейнера в YAML-файле и управлять им. Создадим директорию для проекта и файл docker-compose.yml.
# Создаём удобную директорию для проекта
mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
# Создаём файл docker-compose.yml
nano docker-compose.yml
В открывшийся редактор вставляем следующую конфигурацию. Это стандартный набор, рекомендованный разработчиками:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # Порт для HTTP
- '81:81' # Порт веб-интерфейса самого NPM
- '443:443' # Порт для HTTPS
volumes:
- ./dаta:/data # Здесь хранятся конфиги NPM и SSL-сертификаты
- ./letsencrypt:/etc/letsencrypt # Директория для сертификатов Let's Encrypt
environment:
DB_SQLITE_FILE: "/data/database.sqlite" # Указываем использовать встроенную SQLite БД
Комментарии к конфигурации:
* ports: Мы пробрасываем три критически важных порта с хоста (вашего Pi) в контейнер.
* 80:80 и 443:443 — это порты, которые будут принимать входящий веб-трафик для ваших сервисов.
* 81:81 — порт для самого веб-интерфейса управления NPM.
* volumes: Мы монтируем две директории. Это важно для сохранения данных (ваших настроек прокси и сертификатов) при обновлении или пересоздании контейнера.
* restart: unless-stopped гарантирует, что контейнер автоматически запустится после перезагрузки системы.
Сохраняем файл (в nano — Ctrl+X, затем Y, затем Enter).
Теперь запускаем контейнер:
# Запускаем контейнер в фоновом режиме
docker-compose up -d
Проверим, что контейнер запустился и работает:
docker ps
# Должны увидеть контейнер "nginx-proxy-manager" в статусе "Up"
Первый вход и базовая настройка веб-интерфейса
Откройте браузер и перейдите по адресу http://ВАШ_IP_АДРЕС:81. Например, http://192.168.1.100:81.
Вас встретит окно первого входа.
* Email: admin@example.com
* Пароль: changeme
Сразу после первого входа система заставит вас сменить email и пароль на свои! Обязательно сделайте это и запишите надёжные данные.
Поздравляю, вы внутри! Интерфейс интуитивно понятен: слева меню, в центре — дашборд, виджеты и список уже созданных прокси-хостов (пока пустой).
Создаём первый прокси-хост: выводим Home Assistant под своим доменом
Давайте на реальном примере настроим доступ к Home Assistant через NPM с красивым адресом и SSL.
Предварительные условия
- У вас должен быть настроен и работать Home Assistant (например, на порту 8123 того же сервера).
- У вас должен быть свой домен (например,
myhome.net). Мы будем использовать поддоменhass.myhome.net. - В настройках DNS вашего домена нужно создать A-запись, которая будет указывать ваш поддомен на внешний IP-адрес вашего домашнего интернета. Если вы настраиваете только для локальной сети, можно использовать локальный IP.
Шаг 1: Добавляем Proxy Host
В интерфейсе NPM нажимаем Hosts -> Proxy Hosts -> Add Proxy Host.
Заполняем вкладку Details:
* Domain Names: hass.myhome.net (можно несколько через запятую).
* Scheme: http (так как Home Assistant внутри сети работает по HTTP).
* Forward Hostname / IP: Впишите локальный IP-адрес вашего сервера с Home Assistant. Если он на той же машине, что и NPM, то 192.168.1.100 или, что чаще правильно, host.docker.internal (особый DNS-адрес Docker для доступа к хосту).
* Forward Port: 8123 (стандартный порт Home Assistant).
Шаг 2: Получаем бесплатный SSL-сертификат Let's Encrypt
Это "вишенка на торте". Переключаемся на вкладку SSL.
* SSL Certificate: Выбираем Request a new SSL Certificate.
* Ставим галочку Force SSL — это автоматически перенаправит все HTTP-запросы на HTTPS.
* I agree... — соглашаемся с условиями Let's Encrypt.
* Email Address for Let's Encrypt: Вводим свой email.
Нажимаем Save. NPM начнёт процесс получения сертификата. Если домен (hass.myhome.net) корректно указывает на ваш IP-адрес, а порты 80 и 443 открыты на роутере и проброшены на сервер с NPM, через минуту вы увидите зелёную галочку и статус "Valid" напротив вашего хоста.
Типичная ошибка на этом этапе: "Invalid domain" или таймаут. Причины:
1. Порт 80/443 закрыт на роутере. Вам нужно настроить Port Forwarding на роутере: внешние порты 80 и 443 направить на внутренний IP-адрес вашего сервера с NPM на те же порты.
2. DNS-запись ещё не обновилась. Это может занять до 24 часов, хотя обычно быстрее. Проверьте запись командой nslookup hass.myhome.net.
3. Проблемы с IPv6. Если у вас не настроен IPv6, в настройках домена отключите AAAA-запись.
Продвинутые сценарии и полезные фишки
1. Базовая HTTP-аутентификация (Basic Auth)
Допустим, у вас есть сервис без своего встроенного логина (например, простая панель статуса). NPM позволяет поставить на него пароль.
Создаём Proxy Host как обычно. Затем во вкладке Advanced вставляем следующий конфиг:
# Включаем базовую аутентификацию
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
Но где взять файл .htpasswd? NPM умеет создавать их через интерфейс! Идем в меню Access Lists -> Create Access List. Выбираем тип "Authentication", задаём имя и добавляем пользователей (логин/пароль). После создания, в настройках Proxy Host на вкладке Access List выбираем созданный список.
2. Прокси для веб-сокетов (WebSocket)
Для таких сервисов, как Home Assistant или Node-RED, часто требуется поддержка WebSocket-соединений для реального времени. Для этого в том же блоке Advanced добавьте:
# Поддержка WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
3. Прокси для IP-камер или простых устройств
Вы можете направить поддомен не только на веб-сервисы, но и на IP-камеры с веб-интерфейсом или другие устройства в сети. Главное — правильно указать IP и порт. Это отлично работает в связке с Node-RED + Home Assistant, где вы можете создать единую панель управления с доступом ко всем камерам по удобным адресам.
Проверка результата и тестирование
Всё настроено? Пора проверить!
1. Локально: Откройте браузер и перейдите по своему домену, например, https://hass.myhome.net. Вы должны увидеть интерфейс Home Assistant, а в адресной строке — зелёный замочек.
2. Проверка SSL: Зайдите на сайт SSL Labs SSL Test и проанализируйте свой домен. Должна быть оценка A или A+.
3. Извне: Попробуйте зайти на свой домен с мобильного интернета (отключив Wi-Fi). Если настройки роутера (Port Forwarding) верны, всё будет работать.
Заключение
Nginx Proxy Manager — это тот инструмент, который из категории "круто бы иметь" быстро переходит в разряд "как я жил без этого". Он снимает огромный пласт рутинной работы по настройке Nginx, заботе о SSL-сертификатах и делает вашу домашнюю инфраструктуру не только функциональной, но и по-настоящему взрослой и удобной.
Особенно он хорош в экосистеме умного дома, где сервисов много, а времени ковыряться в конфигах мало. Теперь вы можете сфокусироваться на создании полезных интеграций через HACS или настройке сложной автоматизации, а вопрос красивого и безопасного доступа решён.
Попробуйте, и вы уже не сможете представить свой домашний сервер без этой изящной панели управления прокси. Удачи в настройке!
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Nginx Proxy Manager: установка и первоначальная настройка reverse proxy с HTTPS в Docker
VPN только для выбранных сайтов и устройств в OpenWrt: раздельная маршрутизация трафика
Как проверить IP на блокировку в ТСПУ: рабочий Python-скрипт для диагностики
Routerich AX3000: настройка роутера на OpenWrt, Mesh, TorrServer и сетевое хранилище
Grafana + InfluxDB на Raspberry Pi: создаём красивый дашборд для мониторинга всего дома
ZeroBlock для OpenWrt: настройка VPN и маршрутизации на Routerich