# Интеграция с Nginx Proxy Manager (NPM) Проект умеет автоматически загружать (или обновлять) сертификаты в NPM через его API. ## Включение В конфиге: - `npm_enabled: true` - `npm_host`: например `http://192.0.2.1:81` - `npm_email`, `npm_password` После этого: - `--obtain`, `--renew`, `--auto`, `--test-cert` будут пытаться синхронизировать сертификат в NPM. ## Как работает синхронизация 1) Скрипт логинится в NPM (`/api/tokens`) 2) Получает список сертификатов 3) Ищет сертификат по домену (учитывает `` и `*.`) 4) Если найден — обновляет, иначе — загружает новый ### Про “дубликаты” сертификатов Иногда NPM сразу после загрузки ещё не распарсил домены (поле `domain_names` пустое). Скрипт дополнительно пытается сопоставлять по `nice_name`, чтобы не плодить дубли. Команда для диагностики: - `--list-npm` — показывает сертификаты и подсвечивает дубликаты - `--delete-npm ` — удаляет сертификат по ID ## Ручная загрузка существующего сертификата - `--upload-npm ` Скрипт возьмёт `fullchain.pem` и `privkey.pem` из `cert_dir//` и загрузит/обновит сертификат в NPM. ## Один wildcard сертификат на много поддоменов Практический сценарий: - Получить сертификат на `example.com` + `*.example.com` - В NPM импортировать/использовать этот сертификат для всех Proxy Hosts Обратите внимание: - для wildcard Let’s Encrypt нужен DNS-01 challenge - в NPM можно использовать либо встроенный Let’s Encrypt, либо этот проект как внешний менеджер и синхронизатор ## Пошагово: использовать один wildcard сертификат для всех Proxy Hosts Ниже — практический сценарий, когда вам нужен один сертификат (например, `*.example.com`) и вы хотите назначать его на все хосты. ### Вариант A: сертификат выдаёт этот проект (рекомендуется при reg.ru DNS-01) 1) Убедитесь, что DNS API reg.ru работает: - `letsencrypt-regru --test-api -v` - `letsencrypt-regru --test-dns -v` 2) Получите production сертификат: - `letsencrypt-regru --obtain` 3) Если `npm_enabled=true`, сертификат автоматически появится в NPM. 4) В NPM: - Proxy Hosts → Add/Edit Proxy Host - SSL → выберите сертификат (обычно “Custom/Other”) - включите нужные опции (Force SSL, HSTS по необходимости) ### Вариант B: сертификат выдаёт сам NPM Этот вариант подходит, если NPM может сам пройти challenge. 1) SSL Certificates → Add SSL Certificate → Let’s Encrypt 2) Domain Names: добавьте `example.com` и `*.example.com` 3) Выберите challenge: - HTTP-01: требует доступности NPM из интернета по 80/443 и корректных A/AAAA записей - DNS-01: требует поддерживаемого DNS provider в NPM Если нужного DNS провайдера нет (или нет корректной интеграции для reg.ru), проще использовать этот проект как внешний DNS-01 менеджер. ### Вариант C: импорт уже существующего wildcard сертификата (Custom) Если вы приобрели wildcard сертификат у CA или получили его другим способом: 1) SSL Certificates → Add SSL Certificate → Custom 2) Вставьте: - Certificate: сертификат + intermediate chain (если отдельно — добавьте подряд) - Key: приватный ключ 3) Сохраните и назначайте этот сертификат на Proxy Hosts. ## DNS записи для wildcard Для проксирования поддоменов часто достаточно, чтобы DNS указывал на NPM: - `example.com` → IP NPM - `*.example.com` → IP NPM Точная схема зависит от вашей инфраструктуры. ## Траблшутинг - “не логинится” → проверьте `npm_host` (http/https), креды, доступность - “сертификат не появился” → проверьте `npm_enabled`, логи скрипта - staging сертификаты: не предназначены для production (браузер не доверяет) --- ## Appendix (migrated from: Настройке Nginx Manager с SSL) ## Подробная инструкция по настройке Nginx Proxy Manager с одним глобальным SSL сертификатом для всех доменов example.com ### Предпосылки - Установлен и запущен [Nginx Proxy Manager](http://192.0.2.1:81/) - Основной домен: example.com - Хостинг и DNS записи домена находятся на reg.ru - Нужно использовать один SSL сертификат (например, wildcard) для всех поддоменов example.com --- ### Шаг 1. Покупка и получение SSL Wildcard сертификата для example.com 1. На reg.ru или любом другом удостоверяющем центре (CA) закажите wildcard сертификат на домен вида `*.example.com`. 2. Получите файлы сертификата: - Главный сертификат (CRT) - Промежуточные сертификаты (CA Bundle) - Приватный ключ (KEY) --- ### Шаг 2. Импорт вашего SSL сертификата в Nginx Proxy Manager 1. Авторизуйтесь в Nginx Proxy Manager на http://192.0.2.1:81/ 2. Перейдите в раздел **SSL Certificates** → кнопку **Add SSL Certificate** 3. Выберите **Custom** (пользовательский сертификат) 4. В поля вставьте: - **Certificate** — основной CRT + CA Bundle (если CA Bundle раздельно, склейте в один файл или вставляйте последовательно) - **Key** — содержимое приватного ключа - Имя сертификата задайте, например, `dfv24_wildcard` 5. Сохраните --- ### Шаг 3. Настройка прокси-хостов с использованием глобального сертификата 1. Перейдите в **Proxy Hosts** → **Add Proxy Host** 2. Заполните поля: - **Domain Names**: Например, `sub1.example.com` (для первого поддомена) - **Scheme**: http или https, в зависимости от бекенда - **Forward Hostname / IP**: IP или DNS адрес вашего внутреннего сервиса - **Forward Port**: порт сервиса (например, 80 или 443) 3. Включите **SSL** → Отметьте **Use a shared SSL certificate** (если такая опция доступна) или выберите ранее импортированный сертификат из списка 4. Активируйте: **Block Common Exploits**, **Websockets Support**, выставьте Redirect HTTP to HTTPS, если требуется 5. Сохраните прокси-хост 6. Повторите для всех поддоменов, указывая нужные домены и выбирая тот же wildcard SSL сертификат --- ### Шаг 4. Настройка DNS записей на reg.ru 1. Войдите в панель управления доменом на reg.ru 2. Создайте или отредактируйте DNS записи типа A: - `example.com` → IP вашего Nginx Proxy Manager (например, 192.0.2.1) - `*.example.com` → тот же IP или конкретные поддомены, если есть специальные 3. Сохраните изменения 4. Дождитесь обновления DNS (от нескольких минут до 24 часов) --- ### Шаг 5. Тест и проверка работы 1. В браузере откройте любой из поддоменов `https://sub1.example.com` 2. Сертификат должен быть валидным, выданным на wildcard `*.example.com` 3. Проверьте работу прокси и корректность подстановки сертификата 4. При необходимости проверьте логи Nginx Proxy Manager и исправьте ошибки --- ### Дополнительно - Если в Nginx Proxy Manager нет GUI опции выбора общего сертификата, можно вручную сконфигурировать конфиги через директорий `/data/nginx/proxy_host` и прописать SSL сертификат для всех хостов. - При обновлении сертификата — повторно импортировать его в Nginx Proxy Manager. - Можно использовать LetsEncrypt для автоматического получения wildcard сертификата с помощью DNS валидации (если поддерживается вашим DNS провайдером). --- ## Итог Используйте один wildcard сертификат для всех поддоменов, импортируйте его как пользовательский сертификат в Nginx Proxy Manager, при создании прокси-хостов выбирайте его в настройках SSL. Управляйте DNS записями на reg.ru, направляя домен на IP Nginx Proxy Manager. Это позволит юридически использовать единый сертификат для всех сервисов с различными поддоменами под вашим доменом example.com.