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

Подробности, цифры, термины и чек-лист по теме «Установка Caddy на сервер как обратного прокси». Страница справочника целиком: Установка Caddy.

Коротко о теме

Установка Caddy на VPS: Caddyfile из трёх строк, сертификат Let's Encrypt без Certbot, образ caddy:2 для Docker и разбор ошибки 502 за прокси.

Подробности по разделам

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

Если в конфиге есть публичное доменное имя, Caddy получает сертификат у Let's Encrypt или ZeroSSL, продлевает его и отправляет HTTP-запросы на HTTPS. Программа вроде Certbot рядом не нужна.

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

Без Docker Caddy ставится пакетом из официального репозитория (инструкция для Debian и Ubuntu на caddyserver.com/docs/install). Конфиг лежит в /etc/caddy/Caddyfile, а sudo systemctl reload caddy применяет правки без остановки сайта. Приложение тогда публикуют на локальном адресе, 127.0.0.1:3000:3000, и в Caddyfile пишут reverse_proxy 127.0.0.1:3000.

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

Продление Caddy делает в фоне сам, а при сбое пробует снова: сначала другой тип проверки, потом второго издателя (Let's Encrypt, затем ZeroSSL), затем с нарастающей паузой до 30 дней. Пока вы отлаживаете настройку, переключите Caddy на тестовый сервер Let's Encrypt, у которого нет жёстких лимитов. Браузер покажет такой сертификат как недоверенный, это нормально: Том caddy_data нельзя терять В нём лежат сертификаты и ключи.

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

Заголовок Host Caddy передаёт приложению в том виде, в каком его прислал браузер. Если внешний сервис за прокси требует свой адрес, добавьте строку header_up Host {upstream_hostport} внутри блока reverse_proxy. Заголовки X-Forwarded-For и X-Forwarded-Proto Caddy выставляет сам.

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

Если контейнеров много и они меняются каждый день, ручной список надоест: тогда подойдёт Traefik, который берёт маршруты из меток контейнеров.

Ключевые цифры

Термины на странице

Let's Encrypt
Let's Encrypt выпускает бесплатные DV-сертификаты на 90 дней с автоматическим продлением.
Certbot
Certbot это программа, которая получает и продлевает сертификаты Let's Encrypt на сервере.
Nginx
Nginx это веб-сервер и обратный прокси. Его часто ставят перед приложением, чтобы раздавать статику и держать HTTPS.
Apache
Apache это веб-сервер. На хостинге с ним работают файлы .htaccess.
A-запись
A-запись связывает домен с IPv4-адресом сервера.
TLS
TLS это протокол шифрования, на котором работает HTTPS. Название SSL осталось по привычке.
Трафик
Трафик это объём переданных данных. У одних тарифов он безлимитный, у других платный сверх пакета.
Debian
Debian это дистрибутив Linux, на котором основана Ubuntu. Его ценят за стабильность.

Что проверить

  1. Выпустите сертификат после того, как домен указывает на сервер.
  2. Проверьте, что установлена вся цепочка сертификатов.
  3. Включите перенаправление с HTTP на HTTPS.
  4. Храните данные контейнеров в томах.
  5. Закрепляйте версии образов, а не latest.
  6. Ограничьте ресурсы контейнеров, чтобы один не съел весь сервер.

Связанные страницы