Перейти к содержанию

Домены

Подключение домена

  1. Раздел Домены -> «Добавить домен».
  2. Впишите имя хоста (sub.example.com). Регистр и лишнее значения не имеют: трекер сам приводит имя к канонической форме - убирает схему, путь, порт, завершающую точку и переводит в нижний регистр. HTTPS://Example.COM/path сохранится как example.com.
  3. Привяжите домен к кампании (нужно для «голого» домена - когда ссылка идёт без идентификатора кампании). Домен можно добавить и из карточки кампании: вкладка Tracking -> «+ Добавить новый».
  4. У регистратора направьте A-записьAAAA, если есть IPv6) на IP сервера. Тот же IP печатает установщик в конце работы; если он задан в настройках установки, панель показывает его плашкой в тулбаре раздела «Домены» (по клику копируется). Смена DNS расходится по миру от нескольких минут до нескольких часов.
  5. При первом заходе по HTTPS Caddy сам выпустит сертификат Let's Encrypt. Сертификат выпускается только для доменов, заведённых в этом разделе - иначе любой, кто направит свой домен на ваш IP, заказывал бы сертификаты за ваш счёт.

Один домен обслуживает сколько угодно кампаний по пути домен/<идентификатор>. «Голый» домен (домен/) ведёт на ту кампанию, к которой привязан.

Хост, которого нет в разделе «Домены», трекер не обслуживает - на него отдаётся честный 404, и в лог движка пишется строка с именем хоста и подсказкой. Это же означает, что удаление домена из панели действительно выключает его: раньше удалённый домен продолжал показывать воронку, потому что его подхватывал домен-ловушка. Сертификат удалённого домена убирает ежедневное задание.

Wildcard-домены

Чтобы одним махом обслужить все поддомены, заведите домен с маской - именно в таком виде, со звёздочкой в имени:

*.example.com

Правила совпадения те же, что у DNS: маска покрывает ровно одну метку слева. a.example.com под неё попадает, a.b.example.com - нет, сам example.com - тоже нет (для него заводится отдельная запись). Если подходят несколько масок, выигрывает самая длинная. Флаги и кампания wildcard-записи действуют на все её поддомены.

Как трекер выбирает кампанию

По порядку:

  1. домен/<идентификатор> - первый сегмент пути совпал с идентификатором (алиасом) или токеном кампании;
  2. кампания домена - для «голого» домена, если он привязан к кампании;
  3. домен-ловушка - если ни то ни другое не подошло, а в базе есть домен с флагом Catch-all, трафик достаётся его кампании;
  4. иначе - 404.

Флаги домена

Галочек «SSL» и «Wildcard» здесь больше нет (убраны 2026-08-07). Сертификат выпускается автоматически для любого домена из этого раздела при первом заходе по HTTPS - галочка ничего не включала. Маску задаёт само имя хоста (*.example.com), см. выше; в списке она показывается меткой «Wildcard» по имени, а не по флагу.

  • Только HTTPS - запрос по http перенаправляется на https (301).
  • Разрешить индексацию - по умолчанию трекер отдаёт X-Robots-Tag: noindex, nofollow (клоакинг). Флаг снимает запрет - нужен, если домен должен попадать в поиск.
  • Catch-all - домен-ловушка: подхватывает запросы к заведённым доменам, для которых не нашлось кампании. Ловушка одна на установку - берётся первая такая запись.
  • Домен админки - заход на голый корень домена перекидывает на /admin/. Сама панель и без флага доступна по /admin/ на любом домене.
  • Проксируется через Cloudflare - см. следующий раздел.
  • Cloudflare Zone ID, Заметки - справочные поля.

Подключить домен через Cloudflare (в один клик)

Кнопка «Через Cloudflare» в разделе «Домены». Трекер сам заведёт A-запись в вашей зоне и добавит домен - вместо пяти шагов в двух системах.

Что нужно один раз: API-токен Cloudflare с правом Zone -> DNS -> Edit на нужные зоны. Заводится в Cloudflare: My Profile -> API Tokens -> Create Token -> шаблон «Edit zone DNS». Глобальный ключ аккаунта не подходит и не нужен - он даёт слишком много.

Токен хранится только на вашем сервере, обратно в панель не отдаётся (видны последние 4 символа) и доступен только администратору: он позволяет править DNS всех зон аккаунта.

Домен должен быть уже добавлен в Cloudflare - трекер работает с существующей зоной, а не переносит домен к регистратору.

Галочка «Проксировать через Cloudflare»:

  • выключена (серое облако) - обычный выбор. Сертификат выпишет трекер, адрес посетителя будет настоящим, ничего дополнительно настраивать не нужно;
  • включена (оранжевое облако) - в Cloudflare обязательно выставьте режим SSL/TLS Full, иначе домен ляжет. Подробности - в следующем разделе.

Маску *.example.com так подключить нельзя: сертификат на неё выписывается только через проверку по DNS, и «подключил в один клик» кончилось бы доменом без HTTPS. Заводите её обычной кнопкой «Добавить», а A-запись * - в Cloudflare вручную.

Повторное подключение того же домена не ломается: если A-запись уже есть, она будет поправлена, а не создана второй раз.

Домен за Cloudflare

Если домен проксируется Cloudflare («оранжевое облако»), поставьте в его карточке флаг «Проксируется через Cloudflare». Это не косметика: от него зависит, чей IP трекер считает адресом посетителя.

  • Флаг включён - трекер верит заголовку CF-Connecting-IP, то есть видит настоящий адрес человека. Страна, город, провайдер, фильтр по IP и уникальность считаются правильно.
  • Флаг выключен, а Cloudflare перед доменом стоит - заголовок игнорируется намеренно (иначе его подделал бы кто угодно одной строкой в запросе и обошёл весь клоакинг). Адресом посетителя станет адрес узла Cloudflare, и гео у всего трафика этого домена съедет на страну их дата-центра. Трекер замечает такой случай и пишет об этом в лог один раз на домен.

В самом Cloudflare режим SSL/TLS должен быть Full, не Strict: на сервере в этом случае стоит самоподписанный сертификат.

Важно: зелёный замок в браузере за Cloudflare не означает, что домен указывает на ваш сервер - сертификат там свой. Проверять надо статусом домена (ниже).

Мониторинг и статус

Фоновый чекер каждые ~2 минуты берёт очередную порцию доменов. Здоровый домен перепроверяется раз в 6 часов, домен с ошибкой - раз в 30 минут. Проверяются:

  • доступность origin (TCP :443, при неудаче :80);
  • на нашем ли сервере домен - по сигнатуре X-TrafMate, которую трекер отдаёт на /health. Cloudflare пробрасывает заголовки origin, поэтому способ работает и за прокси, где сравнение IP бесполезно;
  • сертификат - TLS-рукопожатие и срок действия.

Колонка «Статус»

  • 🟢 на нашем сервере (плюс бейдж SSL со сроком) - домен реально указывает на ваш трекер.
  • не на нашем сервере - домен отвечает, но за ним не наш origin: DNS ещё не переключён, или трафик всё ещё идёт на старый трекер.
  • 🔴 недоступен - origin не отвечает.

Бейдж SSL становится оранжевым, когда до истечения сертификата меньше 14 дней.

Ручная проверка

  • «Проверить все (N)» в тулбаре - все домены сразу, параллельно, с прогрессом.
  • Отметьте чекбоксами и нажмите «Проверить (N)» - только выбранные.
  • Кнопка «Проверить» в строке - один домен.

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

Сертификаты: почему домен не открывается по HTTPS

Раздел Обслуживание -> Сертификаты (только для администратора). Он показывает не результат проверки со стороны, а то, что видел сам трекер: Caddy спрашивает разрешение на выписку перед каждым сертификатом, и раздел показывает эти запросы.

Читать надо колонку «Состояние»:

Состояние Что произошло Что делать
Выпущен сертификат есть и действует ничего
Скоро истечёт меньше 14 дней обычно продлевается сам; проверьте, что домен всё ещё ведёт сюда
Истёк продление не прошло чаще всего домен перестал вести на этот сервер
Ждём выписки мы разрешили, сертификата ещё нет отказал сам ACME: не прошла проверка домена или упёрлись в лимит Let's Encrypt. Подождите
Отказано домена нет в списке опечатка в имени; либо wildcard не покрывает нужный поддомен
Запросов не было Caddy ни разу не спросил соединение до сервера не дошло

Последняя строка - главная и самая частая. «Запросов не было» означает, что до трекера не долетело ни одного TLS-рукопожатия, и вопрос не к трекеру, а к маршруту:

  1. A-запись DNS указывает не на этот сервер (или ещё не разошлась);
  2. домен спрятан за чужим прокси - в Cloudflare нужно серое облако, иначе сертификат выписывает Cloudflare, а не мы (см. «Домен за Cloudflare»);
  3. порт 443 закрыт файрволом или занят другим сервисом.

Ниже доменов из списка идут хосты, которых в списке нет, но кто-то направил их на этот сервер. Это либо опечатка (завели example.com, а DNS ведёт www.example.com - видно сразу), либо чужой домен. Поддомены, покрытые wildcard-записью, помечены «по *.example.com» и отдельного заведения не требуют.

Сертификат на саму запись *.example.com не выписывается никогда: wildcard требует проверки через DNS, а мы выписываем по обращению. Поэтому у wildcard-записи в колонке «Действует до» пусто, а сертификаты появляются у конкретных поддоменов - это норма.

Срок действия берётся у того же фонового чекера, что заполняет статус в списке доменов: он делает настоящее TLS-рукопожатие, то есть показывает сертификат, который видит посетитель, а не файл на диске. Колонка «Проверено» говорит, насколько эти данные свежие; чтобы обновить их сразу, нажмите «Проверить» у домена в разделе «Домены».

Добавить сразу несколько доменов

Кнопка «Добавить списком» в разделе «Домены». Разделитель любой: перевод строки, запятая, точка с запятой или пробел - список обычно приходит из буфера обмена. Ссылку можно вставлять целиком, хост будет взят из неё.

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

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

Имя домена проверяется. Кириллические имена приводятся к punycode автоматически (пример.рф -> xn--e1afmkfd.xn--p1ai): Caddy и движок сравнивают хосты побайтово, и без преобразования домен просто не нашёлся бы. Отклоняются имена без точки, с пробелами и подчёркиваниями, с дефисом по краям части, а также IP-адрес, введённый в поле домена.