Системный журнал — практичная база знаний по VPS и Linux
ACME • SSL • VPS

ACME-сертификаты на VPS: как не сломать nginx и автопродление

ACME-клиенты позволяют автоматически выпускать и продлевать сертификаты. Но если nginx занимает 80 порт, standalone-проверка может ломаться. Поэтому важно выбрать правильную схему.

HTTP-01 challenge

При HTTP-01 центр сертификации обращается к серверу по 80 порту и проверяет специальный ответ. Поэтому порт 80 должен быть доступен снаружи.

Если firewall закрывает 80 порт, HTTP-01 проверка не пройдёт.

Standalone-режим

В standalone-режиме ACME-клиент сам поднимает временный HTTP-сервер. Если nginx уже слушает 80 порт, выпуск завершится ошибкой.

Решение — временно остановить nginx через pre-hook и запустить обратно через post-hook.

Webroot-режим

В webroot-режиме nginx продолжает работать, а ACME-клиент кладёт challenge-файл в каталог сайта. Это аккуратнее для обычного веб-сервера, но требует правильного location.

location ^~ /.well-known/acme-challenge/ {
    root /var/www/site;
    default_type text/plain;
    allow all;
}

Pre-hook и post-hook

--pre-hook "systemctl stop nginx || true" \
--post-hook "systemctl start nginx || true"

Такой подход подходит, если вы осознанно используете standalone и готовы освобождать порт 80 на время проверки.

Reload hook

После обновления сертификата сервис должен перечитать файлы. Если сертификат использует x-ui, nginx или другой сервис, его нужно перезапустить или reload-нуть.

Pre/post hook управляют процессом проверки, reloadcmd — применением нового сертификата.

Проверка

~/.acme.sh/acme.sh --list
grep -E "Le_PreHook|Le_PostHook|Le_ReloadCmd" ~/.acme.sh/*/*.conf