Nginx Proxy Manager: 5 сервисов с HTTPS за 5 минут
Nginx Proxy Manager — находка для тех, кто не хочет править nginx конфиги руками. Я сам долго сидел на ручных конфигах и знаю, как это больно. Одна ошибка в синтаксисе, и весь сайт лежит. Когда я открыл для себя NPM, жизнь стала заметно проще. Теперь у меня на Proxmox крутится несколько сервисов: WordPress, ComfyUI, Grafana. Каждый работает на своём порту, а NPM делает так, что все они доступны по стандартным портам 80 и 443 с красивыми доменами.
Почему я выбрал NPM
Раньше для каждого нового сервиса мне приходилось создавать отдельный конфиг nginx, перезапускать службу и молиться, чтобы ничего не сломалось. NPM дал мне удобный интерфейс, в котором всё управляется через веб-панель. Никакого редактирования файлов на сервере.
Это особенно удобно, когда сервисов много и они часто добавляются. Я добавляю новый прокси-хост за пару минут, а SSL выпускается в один клик. Для человека, который администрирует домашний сервер в одиночку, это настоящий подарок.
Как устроена моя схема
Схема у меня такая: LXC-контейнер с Ubuntu, внутри контейнера Docker, внутри Docker работает NPM. Я пробросил в контейнер порты 80 и 443. Теперь весь внешний трафик сначала попадает в NPM, а он уже решает, куда его направить.
Дальше всё просто. Я добавляю proxy host: указываю домен, например mysurik.ru, и внутренний адрес сервиса, например внутренний IP контейнера на порту 8080. NPM берёт на себя приём запросов и их пересылку. Красиво и удобно.
Установка за десять минут
Установка NPM и правда занимает около десяти минут. Сначала я разворачиваю LXC-контейнер, что в Proxmox делается быстро по шаблону. Потом ставлю в него Docker и запускаю контейнер NPM с проброшенными портами. Пара команд — и панель доступна.
Первый вход в панель происходит с адреса сервера на порту 81. Там я меняю пароль и создаю свой аккаунт. После этого панель готова к работе. Всё интуитивно понятно, даже без чтения документации.
Добавление первого прокси-хоста
Добавление прокси-хоста — главная операция в NPM. В панели открываю раздел хостов, нажимаю добавить и заполняю поля: имя домена, адрес сервиса и порт. Для mysurik.ru я указываю внутренний адрес сервера WordPress на порту 8080. Сохраняю — и сайт доступен.
Если домен уже обслуживается где-то ещё, нужно переключить DNS на адрес сервера. После этого NPM начнёт принимать запросы. Я делаю это аккуратно, чтобы не сломать работу сайта. Постепенно все мои сервисы переехали на эту схему.
SSL в один клик
Самое приятное в NPM — это выпуск SSL-сертификатов. Раньше я настраивал Let’s Encrypt вручную и обновлял сертификаты скриптами. Здесь всё делается в один клик прямо в панели. Указываю домен, жму кнопку — и сертификат выпущен и автоматически обновляется.
Это огромная экономия времени и нервов. Никаких ручных команд, всё хранится в интерфейсе. Я выпустил сертификаты для всех своих доменов за один вечер. Качество шифрования при этом осталось отличным.
Что ещё умеет NPM
Кроме проксирования, NPM умеет много полезного. Он поддерживает балансировку нагрузки между несколькими серверами, настройку веб-сокетов для приложений реального времени и продвинутые заголовки для оптимизации. Я постепенно открываю для себя эти функции по мере роста моих задач.
Отдельно радует, что панель показывает статистику и статусы хостов. Я сразу вижу, какой сервис доступен, а какой упал. Это помогает быстро находить проблемы, не залезая в логи каждого сервиса отдельно.
Мой первый опыт с веб-сокетами
Когда я подключал сервис с веб-сокетами, я чуть не потерял время. Оказалось, что для них нужна специальная настройка в NPM. Без неё соединения обрывались, и приложение работало нестабильно. После включения поддержки веб-сокетов всё заработало как надо.
Теперь я всегда проверяю, нужны ли сервису веб-сокеты, и сразу включаю их в настройках хоста. Это избавило меня от долгих разбирательств. Такие мелочи приходят только с опытом.
Как я управляю обновлениями
Обновления NPM я делаю регулярно. Так как он работает в Docker, обновление сводится к перезапуску контейнера с новой версией. Мои настройки при этом сохраняются, потому что хранятся в отдельном томе. Процедура занимает пару минут.
Я обновляюсь раз в несколько недель, чтобы получать исправления безопасности. Это важная привычка, особенно когда NPM открыт наружу. Лучше потратить пару минут на обновление, чем потом разбираться с последствиями.
Почему панель удобнее конфигов
Для меня главное преимущество панели — наглядность. Я вижу все хосты, все домены и статусы в одном месте. Нет необходимости помнить, где лежит какой конфиг и что там написано. Всё собрано в одном интерфейсе, и это сильно упрощает администрирование.
Когда ко мне обращаются друзья с вопросами по их серверам, я первым делом рекомендую им NPM. Практически каждый после установки удивляется, как раньше жил без этого. Инструмент реально экономит часы времени.
Углублённая настройка
Когда базовая схема заработала, я начал копать глубже. NPM умеет делать редиректы, настраивать Access Lists, вести белые списки адресов. Это помогает закрыть панели от посторонних и настроить поведение по своему вкусу. Углублённая настройка NPM — редиректы, Access Lists, белые списки — в отдельной статье.
Я использую эти возможности для сервисов, которые не хочу открывать всем подряд. Например, панели администрирования закрыты по списку разрешённых IP. Так они остаются доступными мне, но скрыты от случайных посетителей.
Решение типичных проблем
За время работы с NPM я столкнулся с несколькими типичными проблемами. Самая частая — сертификат не выпускается, потому что домен не направлен на сервер или порт 80 закрыт файрволом. Я проверяю эти вещи в первую очередь. Обычно проблема решается настройкой DNS и правил файрвола.
Вторая проблема — сервис не отвечает через прокси, хотя напрямую работает. Чаще всего виноват неправильно указанный внутренний адрес или порт. Я перепроверяю настройки хоста и доступность сервиса из контейнера NPM. После этого всё обычно заработает.
Настройка файрвола
Особое внимание я уделяю файрволу. Контейнеру с NPM должны быть доступны порты 80 и 443 извне. При этом внутренние порты сервисов я стараюсь не открывать наружу, чтобы доступ шёл только через прокси. Это повышает безопасность всей системы.
В Proxmox я настраиваю правила на уровне сети, а не в самом NPM. Так управление сосредоточено в одном месте. Когда я закрыл внутренние порты и оставил только 80 и 443, количество попыток взлома заметно упало.
Зачем мне понадобился реверс-прокси
До NPM у меня не было единой точки входа. Каждый сервис висел на своём порту: WordPress на 8080, Grafana на 3000, ещё что-то на других. Запоминать порты было неудобно, а доступ с телефона — тем более. Реверс-прокси решил эту проблему, собрав всё под красивыми доменами.
Теперь я захожу на свой сервис по понятному имени, а не по набору цифр. Это удобно и для меня, и для членов семьи, которые пользуются домашними приложениями. Порты остались, но они спрятаны за прокси и не мешают.
Удобство для членов семьи
Отдельно оценил удобство для домашних пользователей. Им не нужно знать ни одного IP-адреса или порта. Просто адрес в браузере — и нужный сервис открывается. Например, у нас есть сервис с фильмами, доступный по понятному домену.
Раньше я давал родным ссылки с портами, и они постоянно путались. Теперь всё просто. Чем меньше порогов входа, тем охотнее семья пользуется моими сервисами. Это тоже плюс в копилку NPM.
Уроки, которые я вынес
Главный урок, который я вынес из работы с NPM, — не усложняйте. Раньше я любил собирать сложные конфигурации вручную и гордился этим. Но чем сложнее система, тем труднее её поддерживать. NPM доказал, что простота часто выигрывает.
Теперь я выбираю проверенные инструменты, которые решают задачу без лишней возни. NPM — именно такой инструмент для реверс-прокси. Если вы тоже стоите перед выбором, попробуйте NPM первым. Скорее всего, на нём и остановитесь.
Куда дальше развивать схему
Сейчас я думаю о том, чтобы добавить в схему нагрузочное тестирование и мониторинг. NPM даёт базовые статусы, но хочется больше данных. В планах подключить Grafana и считать метрики со всех сервисов. Это следующий шаг в развитии моей инфраструктуры.
Также я смотрю в сторону автоматизации. Хочется, чтобы новый сервис подключался к NPM автоматически, без ручных шагов в панели. Пока это не критично, но в будущем точно пригодится. Развитие не стоит на месте.
Советы новичкам по NPM
Новичкам я бы посоветовал не бояться экспериментировать. Панель NPM позволяет быстро создавать и удалять хосты, так что ошибиться не страшно. Я пересоздавал свои первые прокси по несколько раз, пока не разобрался во всех настройках. Это нормальный путь.
Также стоит внимательно читать ошибки. NPM почти всегда пишет, в чём проблема: недоступен адрес, не проходит проверка домена или нет доступа к порту. Расшифровав сообщение, я находил решение быстрее, чем гугля по форумам.
Как работает моя сеть
Моя схема с NPM выглядит так: внешний трафик приходит на сервер по портам 80 и 443, попадает в контейнер NPM, который распределяет запросы по внутренним сервисам. Каждый сервис живёт в своём контейнере или виртуальной машине и слушает свой внутренний порт.
Такая архитектура удобна тем, что сервисы изолированы друг от друга. Если один упадёт, остальные продолжат работать. NPM просто перенаправит запрос на живой сервис. Надёжность системы выросла заметно.
Планы на автоматизацию
В перспективе я хочу автоматизировать выпуск сертификатов и добавление новых хостов. NPM уже делает SSL в один клик, но хочется, чтобы всё происходило без моего участия. Сейчас изучаю API панели и скрипты для автоматизации.
Когда автоматизация заработает, я смогу подключать новый сервис одной командой. Это финальный штрих в построении удобной инфраструктуры. Пока это планы, но двигаюсь в этом направлении.
Итог
Nginx Proxy Manager стал важной частью моей инфраструктуры. Он избавил меня от ручного редактирования конфигов и сделал управление сервисами простым и наглядным. Любой новый сервис подключается за пару минут, а SSL выпускается автоматически.
Nginx Proxy Manager — часть моей Proxmox-инфраструктуры. В общем гайде по Proxmox я собрал все статьи про гипервизор и сопутствующие сервисы. Рекомендую заглянуть, если вы строите свой домашний сервер.