Настройка NGINX Proxy Manager для работы с доменами на REG.RU на UNRAID
Когда я решил обзавестись собственным сервером, я с самого начала не планировал быть его единственным пользователем — возможность поделиться медиатекой, хостингом фотографий и файлов, а также совместные игры с друзьями и родственниками подразумевались с самого начала.
Однако после первичной настройки и радости от мысли и собственном маленьком "дата-центре", пришла пора задуматься о безопасности. Пускай все сервисы на моем UNRAID сервере живут в контейнерах, открывать и перенаправлять все новые и новые порты мне надоело, а делиться адресом вроде 187.22.154.241:8096 просто неудобно. К тому же, популярное облачное хранилище Nextcloud прямо требует от тебя доменное имя, на котором будет квартироваться.
Обратный прокси NGINX позволяет убить двух птиц разом: закрыть "лишние" порты для внешнего интернета и обеспечить работу доменных имен с локальными адресами.
В данном гайде я расскажу (и покажу) как настроить NGINX Proxy Manager на UNRAID для работы с локальными сервисами, а так же получить бесплатные сертификаты Let's Encrypt!
Данный гайд не претендует на профессианализм, скорее всего есть способы настроить все лучше, правильнее и аккуратнее. Я лишь делюсь собственным опытом, тем, что помогло лично мне добиться требуемого результата.
Подготовка
Мне почему-то не удалось добиться успеха с кастомной сетью или режимом Bridge. Пришлось пользоваться режимом сети Host для контейнера. Но тогда возникает другая проблема: веб-интерфейс UNRAID и рабочий порт NGINX Proxy Manager одинаковые.
Поэтому самым перым делом надо изменить порт веб-интерфейса UNRAID. Для этого заходим в Settings, затем в Management Access и меняем HTTP порт.
Также для нормального доступа к своим сервисам крайне желательно (я бы даже сказал НЕОБХОДИМО) иметь статический адрес, который не будет меняться при каждом перезапуске роутера или оборудования провайдера даже если у вас не было ни единого разрыва с ноября прошлого года.
Установка NGINX Proxy Manager
Далее, устанавливаем контейнер с официальным NGINX Proxy Manager
Во время установки меняем тип сети на Host — контейнер получит приямой доступ к сетевому соединению нашего сервера.
Все установилось? Отлично! Заходим в веб-интерфейс NGINX Proxy Manager. При первом запуске для входа используем логин admin@example.com и пароль changeme.
В самую первую очередь нам нужно создать нового пользователя и задать ему пароль. Стандартый логин и пароль сразу после этого станут неактивны.
В настройках своего роутера настраиваем переадресацию портов 80 и 443 на наш сервер. Положение этой настройки зависит от производителя роутера: например у ASUS она находится разделе "Интеренет", а у OpenWRT — в разделе Сеть -> Межсетевой экран.
Настройки REG.RU
Процесс регистрации и покупки домена мы здесь рассматривать не будем, я рассчитываю, что с этим вы справились сами.
В личном кабинете заходим в Домены, а там в DNS-серверы и управление зоной
Здесь нам нужно сделать А записи, которые будут прямо ссылаться на наш внешний IP-адрес. Скорее всего вы его уже знаете, но если что, всегода можно проверить на сервисе, вроде https://2ip.ru/, да даже Яндекс теперь при запросе "проверить свой IP" выдает готовый ответ.
Так же нам понадобятся CNAME записи на поддомены, на которых будут сидеть наши сервисы. Есть 2 способа: можно прописать каждый поддомен отельно, а можно просто разом закрыть все возможные варианта поставив *.
Настройка Proxy Hosts в NGINX Proxy Manager и создание бесплатных SSL сертификатов
Наконец мы добрались до самого главного! В веб-интерфейсе заходим в Proxy Hosts, жмем Add Proxy Host.
В верхней строке прописываем адрес (вводим, а потом мышкой жмем на появившийся вариант ниже). Scheme оставляем http - запрос происходит локально, после чего указывам ЛОКАЛЬНЫЙ IP-адрес сервиса и порт. Заодно включаем переключатели для блокировки самых простых эксплоитов в поддержку вебсокетс.
Ниже выбираем, доступен ли адрес публично или есть дополнительные настройки доступа. В данном примере оставим его публичным.
Переходим во вкладку SSL. Тут выбираем запросить новый SSL-сертификат или, например, использовать сертификат от основного домена. В данном примере мы запрашиваем новый. Включаем переключатели принудительного использования SSL и поддержку HTTP/2. Ниже видим наш адрес почты (при необходимости редактируем) — на него будут приходить уведомления об истечении срока действия и соглашаемся с условиями сервиса Let's Encrypt. Жмем Save.
Готово!
Можно проверять работоспособность и доступ по адресу. Можно просто ткнуть на него в списке прокси хостов.
Приятного добавления сервисов! На всякий случай напомню, что у Nextcloud AIO надо ссылаться на порт контейнера nextcloud-aio-apache (порт 11000).
One more thing
Доступ к субдомену с авторизацией
Иногда требуется предоставить доступ к сервису, веб-интерфейс которого недостаточно защищен. В моем случае это доступ к торренто-качалке Deluge, которой разрешено пользоваться мужу моей сестры — он помогает мне вести библиотеку Jellyfin. Поэтому поверх просто пароля, который запрашивает Deluge я добавил дополнительную авторизацию.
Заходим в Access Lists, жмем Add Access List.
В первой вкладке задаем и сохраняем имя списка, не забыв вкоючить Pass Auth to Host. На второй заводим логины и пароли. Опционально можно в третьей вкладке установить с каких IP-адресов в принципе принимать запросы. Например, если у кого-то тоже статический IP, можно вбить его туда и еще повысить безопасность.
Теперь можно вместо публичного доступа задать доступ по данному списку. Доступ по спискам можно настроить как для новых Proxy Hosts, так и отредактировать уже существующие.