Skip to content

Генерируемый vhost ссылается на ещё не выпущенный сертификат → reload падает на новом домене #71

Description

@friench

Проблема

src/lib/nginx-templates.ts:33-35 на этапе записи файла эмитит ssl_certificate /etc/letsencrypt/live/mail.<domain>/fullchain.pem, а NginxService.regenerate() (domain/nginx/service.ts:80-88) сразу вызывает nginx -s reload. На новом домене сертификата ещё нет, а nginx -s reload отклоняет весь конфиг, если любой referenced cert-файл отсутствует.

jonasal/nginx-certbot обычно пре-сидит dummy-сертификаты, но по своему циклу — есть окно, где reload из mail-api обгоняет создание dummy-сертификата и падает.

Код обрабатывает это gracefully (ошибка reload ловится, логируется warn, файлы остаются на диске — service.ts:83-86), так что не фатально. Но провалившийся reload означает, что vhost нового домена (и любое другое отложенное изменение в том же reload) не применится до следующего успешного reload.

Фикс (варианты)

  • renderMailVhost эмитит ssl_*-директивы только после подтверждения, что cert-путь существует; иначе пишет vhost с shared dummy/self-signed сертификатом и переключается на реальный путь при следующей регенерации.
  • Как минимум — задокументировать, что добавление домена может потребовать второго reload после выпуска сертификата.
  • Заодно: включить OCSP stapling (ssl_stapling on; ssl_stapling_verify on; — сейчас задан ssl_trusted_certificate, но stapling выключен) и HSTS в шаблоне.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions