Установка Caddy на сервер как обратного прокси: коротко и с данными

Конспект страницы: 7 разделов коротко, данные на 14 октября 2026 и ответы на 4 вопроса. Полный разбор с примерами: Установка Caddy на сервер как обратного прокси.

Коротко

Установка Caddy на сервер нужна, чтобы приложение в контейнере получило HTTPS без отдельной программы для сертификатов: Caddy сам выпускает сертификат Let's Encrypt, продлевает его и переводит посетителей с HTTP на HTTPS. Обратный прокси, то есть сервер, который принимает запросы из интернета и передаёт их приложению, занимает в его конфиге три строки. Для одного-трёх приложений берите Caddy: домен, строка reverse_proxy и открытые порты 80 и 443.

Конспект по разделам

Что делает Caddy перед приложением в контейнере

Caddy это веб-сервер с открытым кодом под лицензией Apache 2.0, написанный на Go и поставляемый одним файлом. На сервере его ставят как обратный прокси: он слушает порты 80 и 443, а приложение прячется за ним и принимает запросы только от Caddy. Главное отличие от Nginx: HTTPS включён по умолчанию.

Установка Caddy в Docker: compose-файл и Caddyfile

Контейнер whoami нужен для проверки: он отвечает списком заголовков запроса. Когда схема заработает, замените его своим приложением и укажите его порт. Имя whoami работает, потому что Caddy и приложение лежат в одной сети compose.

Как Caddy выпускает и продлевает сертификат для домена

По документации Caddy сертификат выпустится сам, если выполнены пять условий: A или AAAA-запись домена указывает на сервер, порты 80 и 443 открыты снаружи, Caddy может занять эти порты, каталог данных доступен для записи и не пропадает, а домен упомянут в конфиге. Проверка владения идёт двумя способами: через порт 80 (HTTP-проверка) или через порт 443 (TLS-ALPN). Оба включены по умолчанию.

Ошибки Caddy: 502, неверный Host и закрытый порт 80

Про локальный адрес в Docker: внутри контейнера Caddy слово 127.0.0.1 означает сам Caddy, а не сервер. Если приложение работает на хосте, добавьте в сервис extra_hosts: ["host.docker.internal:host-gateway"] и пишите reverse_proxy host.docker.internal:3000. Если приложение в compose, пишите имя его сервиса.

Несколько сайтов и пароль на панель в одном Caddyfile

Каждый домен это отдельный блок. WebSocket, нужные таким приложениям, как n8n, Caddy проксирует без дополнительных настроек. Для панелей без своего входа добавьте пароль директивой basic_auth, хэш получают командой caddy hash-password.

Caddy, Traefik или Nginx: какой прокси поставить

Выбор зависит от того, сколько у вас приложений и какой конфиг уже есть. Ответьте на два вопроса ниже. Два ответа, и подсказка назовёт программу с готовой страницей на этом сайте

Запустите свой сервер за пару минут

Почасовая оплата: тестовый стенд на сутки стоит десятки рублей, а не месячный тариф.

Данные

КтоПортОткуда доступен
Caddy80 и 443из интернета
Приложениенапример 3000только с самого сервера или из сети Docker
Что видитеПричинаЧто проверить
502 Bad GatewayCaddy не дозвонился до приложения: оно не запущено, порт другой, или в Docker указан 127.0.0.1docker compose logs caddy, затем curl -I на адрес приложения из контейнера Caddy
Сертификат не выпускается, в журнале timeout или connection refusedПорты 80 и 443 закрыты файрволом или DNS-запись ведёт на другой IPsudo ufw status и dig +short app.example.com
Caddy не стартует: address already in useПорт 80 уже занял Nginx или Apache, поставленный вместе с системойsudo ss -tlnp | grep ':80 ', затем остановите чужую службу
Приложение отвечает 404 или чужой страницейЕму нужен другой заголовок HostВыведите заголовки через whoami и сравните с ожиданиями приложения

Данные на 14 октября 2026.

Вопросы и ответы

Нужен ли Certbot, если на сервере стоит Caddy?

Нет. Caddy сам запрашивает сертификат у Let's Encrypt или ZeroSSL и продлевает его, пока работает и видит порты 80 и 443. Certbot нужен только Nginx или Apache.

Почему Caddy в Docker выдаёт 502 для приложения на localhost?

В контейнере localhost указывает на сам Caddy. Укажите имя сервиса из compose-файла или адрес host.docker.internal с записью host-gateway в extra_hosts.

Как проверить, что Caddy выпустил сертификат?

Откройте домен в браузере или выполните curl -I https://домен: должен прийти ответ без ошибки сертификата. Причину отказа ищите в журнале командой docker compose logs caddy.

Можно ли держать Caddy и Nginx на одном сервере?

Да, но порты 80 и 443 займёт только один из них. Второй переведите на другой порт, например 8080, и пустите к нему трафик через первый.