VDS · Сайты и веб-серверы

Caddy: сайт с сертификатом из коробки

Веб-сервер, который сам получает и продлевает HTTPS-сертификат. Установка на VDS, минимальный Caddyfile и переезд с Nginx.

Обновлено 23 августа 2026 г.

Caddy делает то же, что Nginx, но сам выпускает и продлевает сертификаты Let's Encrypt. Конфигурация сайта умещается в три строки, поэтому для первого проекта на VDS это самый короткий путь до рабочего HTTPS.

Установка

Debian и Ubuntu — из официального репозитория:

apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  > /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddy

AlmaLinux и CentOS Stream:

dnf install -y 'dnf-command(copr)'
dnf copr enable -y @caddy/caddy
dnf install -y caddy && systemctl enable --now caddy

Первый сайт

Весь конфиг живёт в /etc/caddy/Caddyfile:

example.ru {
    root * /var/www/example.ru
    file_server
    encode gzip zstd
}
mkdir -p /var/www/example.ru
echo '<h1>Работает</h1>' > /var/www/example.ru/index.html
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy

Через несколько секунд после первого запроса сайт откроется по https://example.ru. Ничего дополнительно запускать не нужно: Caddy сам сходил за сертификатом и сам будет его продлевать.

Проксирование приложения

Если у вас Node.js или Python-сервис на локальном порту, конфиг такой:

api.example.ru {
    reverse_proxy 127.0.0.1:3000
}

Заголовки X-Forwarded-For и X-Forwarded-Proto Caddy подставляет сам. Подробнее о схеме — обратный прокси.

Несколько сайтов — просто несколько блоков в том же файле, см. несколько сайтов на одной машине.

Что нужно проверить заранее

  • A-запись домена указывает на адрес машины из «Обзора» панели /hosting/vds/<id>;
  • порты 80 и 443 открыты в брандмауэре машины и не заняты Nginx или Apache;
  • домен реально резолвится: dig +short example.ru.

Без выполненного первого пункта выпуск сертификата не пройдёт: Let's Encrypt должен достучаться до вашей машины по имени домена.

Частые ошибки

СимптомПричина
could not get certificateДомен не указывает на машину или 80-й порт закрыт
address already in useРаботает Nginx или Apache — остановите один из них
Сайт открывается только по HTTPВ Caddyfile указан :80 или http:// перед именем
Слишком много попыток выпускаЛимиты Let's Encrypt — отлаживайте на tls internal

Логи: journalctl -u caddy -f.

Caddy хранит сертификаты в /var/lib/caddy/.local/share/caddy. Переустанавливая систему на вкладке «Доступ», скопируйте этот каталог, иначе после переустановки выпуск начнётся заново.