Блог

Кастомные домены для SaaS: как дать клиентам использовать собственный домен с Cloudflare for SaaS

Как позволить клиентам подключать свой домен к вашему SaaS через Cloudflare for SaaS: как работает проверка, сколько это стоит на октябрь 2026 года и где возникают проблемы.

Автор: Nicolás Cerón ·

Ряд непохожих друг на друга витрин на ночной улице; под тротуаром в разрезе видны малиновые кабели, которые соединяют каждый магазин с единым общим машинным залом.

Коротко

Чтобы клиент мог открывать ваше приложение на своём домене, например portal.customer.com, нужно зарегистрировать этот домен как кастомный хостнейм в вашей зоне Cloudflare. Клиент добавляет одну CNAME-запись, указывающую на вас, Cloudflare проверяет, что хостнейм принадлежит ему, центр сертификации выпускает сертификаты, и запросы начинают поступать в ваше приложение.

На октябрь 2026 года на странице тарифов Cloudflare for SaaS указано, что тарифы Free, Pro и Business включают 100 кастомных хостнеймов, каждый дополнительный стоит $0.10, а максимум для этих тарифов — 50 000 хостнеймов.

Два ограничения определяют любую архитектуру. Без платного дополнения Enterprise клиенты не смогут направить на вас «голый» корневой домен (customer.com). А хостнеймы с подстановочным знаком (wildcard), собственные сертификаты и выбор центра сертификации доступны только на Enterprise. Настройка Cloudflare занимает несколько шагов. Продуктовая работа вокруг неё занимает больше времени, и в основном об этом это руководство.

Что такое кастомный хостнейм

Кастомный хостнейм — это домен, которым владеет ваш клиент и который Cloudflare направляет в вашу зону. В руководстве по настройке четыре составляющие:

  • SaaS-зона. Ваш собственный домен в Cloudflare с включённым Cloudflare for SaaS. Для старта достаточно зоны на тарифе Free.
  • Резервный origin. Проксируемая DNS-запись, например proxy-fallback.yourapp.com, куда идёт трафик кастомных хостнеймов.
  • CNAME-цель. Необязательное более удобное имя, на которое клиенты направляют домен, например customers.yourapp.com.
  • Кастомный хостнейм. Домен клиента, созданный через API или панель, со своим статусом проверки. Для каждого Cloudflare выпускает два сертификата: основной ECDSA P-256 и резервный RSA 2048 бит для старых клиентов.

Если ваше приложение работает на Cloudflare Workers, платформе, на которой строит Dardo, Worker может служить резервным origin. Маршрут */* перехватывает запросы для всех кастомных хостнеймов, а ваш код читает заголовок Host, чтобы определить тенанта. Cloudflare также предлагает пользовательские метаданные для каждого хостнейма, но это платное дополнение Enterprise, поэтому на других тарифах такой поиск выполняется в вашей собственной базе данных, например в D1.

Как это работает

  1. Клиент вводит домен в настройках вашего приложения. Бэкенд нормализует его и вызывает эндпоинт Create Custom Hostname, указав метод проверки сертификата.
  2. Клиент добавляет DNS-запись, которую вы ему показываете, например portal.customer.com CNAME customers.yourapp.com.
  3. Cloudflare проверяет владение хостнеймом. Проверка в реальном времени запускается, когда появляется CNAME, и это может привести к кратковременному простою. Предварительная проверка использует TXT-запись или HTTP-токен до смены DNS, для уже работающих доменов. Предварительная проверка не поддерживается, если зона самого клиента тоже находится в Cloudflare (схема «Orange-to-Orange»).
  4. Центр сертификации проверяет контроль над доменом и выпускает сертификаты.
  5. Хостнейм готов, когда status и ssl.status имеют значение active, а DNS указывает на вашу цель. Cloudflare предупреждает, что TLS-рукопожатие может пройти до того, как ssl.status станет active, поэтому источником истины считайте эндпоинт с данными о кастомном хостнейме.

Методы проверки сертификата

Руководство по проверке Cloudflare предлагает такие варианты:

МетодЧто делает клиентРаботает до переключения DNSПримечания
HTTP, автоматическийТолько добавляет CNAMEНетСамый простой. Cloudflare советует его, когда клиенты «могут пережить несколько минут простоя».
HTTP, ручнойНичего, если домен уже указывает на вас; иначе размещает ваш токен на своём текущем сервереДаПолезен, когда домен уже работает у другого провайдера.
TXTДобавляет TXT-запись, которую вы ему даётеДаОбязателен для хостнеймов с подстановочным знаком.
Delegated DCVОдин раз добавляет CNAME _acme-challengeДаПозволяет Cloudflare продлевать все будущие сертификаты. Существующая TXT-запись _acme-challenge этому мешает.

Проверка не длится бесконечно. Cloudflare повторяет проверку хостнейма 75 раз в течение семи дней, и согласно графику повторных попыток, «если проверка не пройдена, кастомный хостнейм будет удалён». Токены сертификатов тоже истекают: через 7 дней в Let's Encrypt и через 14 дней в Google Trust Services или SSL.com.

Сколько это стоит на октябрь 2026 года

FreeProBusinessEnterprise
Включено хостнеймов100100100По договорённости
Цена за дополнительный хостнейм$0.10$0.10$0.10По договорённости
Максимум хостнеймов50,00050,00050,000Без ограничений (свыше 50 000 обращайтесь в отдел продаж)
Кастомные хостнеймы с подстановочным знакомНетНетНетДа
Собственные сертификаты и выбор центра сертификацииНетНетНетДа
Проксирование корневого домена / BYOIPНетНетНетПлатное дополнение
Пользовательские метаданныеНетНетНетПлатное дополнение

На странице тарифов $0.10 указано без периода. В анонсе 2022 года Cloudflare описывала это как снижение цены «с $2 до $0.10 в месяц». При такой месячной ставке 1 000 клиентских доменов означают 900 сверх включённых 100, то есть $90 в месяц.

Два правила биллинга важны для проектирования продукта. Согласно странице о квотах и биллинге Cloudflare, каждый хостнейм учитывается в потреблении, пока вы его не удалите, включая «хостнеймы, ожидающие проверки или активации». А на тарифах без Enterprise действует порог, применяемый через API, после которого новые хостнеймы отклоняются.

Где это ломается

Корневые домены

В руководстве по настройке Cloudflare сказано прямо: «По умолчанию использование A-записи для указания на целевой хост не поддерживается». Большинство DNS-провайдеров не разрешают CNAME в корне домена, поэтому клиентам нужен поддомен, например www.customer.com или app.customer.com. Apex proxying закрепляет за вашим аккаунтом статические IP-префиксы, и клиенты могут использовать A-запись, но это платное дополнение для тарифа Enterprise. Без него просите клиентов использовать поддомен и объясните, как у своего DNS-провайдера настроить перенаправление с домена без поддомена на него.

Центры сертификации и записи CAA

В справочнике по центрам сертификации Cloudflare для пользовательских хостнеймов указаны Let's Encrypt (сертификаты на 90 дней), Google Trust Services и SSL.com (14, 30 или 90 дней). Выбирать центр сертификации можно только на тарифе Enterprise; в остальных случаях Cloudflare использует свой центр по умолчанию и сначала проверяет записи CAA. Если CAA-записи клиента не разрешают этот центр, выпуск завершается ошибкой «CAA records block issuance», и исправить это может только клиент. Проверка CAA проходит по цепочкам CNAME, поэтому учитываются и CAA-записи вашего собственного целевого домена. Остальные ошибки на стороне клиента перечислены в руководстве по устранению неполадок: неисправный DNSSEC и DNS-серверы, отвечающие SERVFAIL.

Продление

Сертификаты пользовательских хостнеймов действуют 90 дней и могут продлеваться за 30 дней до истечения срока. Активные хостнеймы без подстановочных символов продлеваются автоматически по HTTP. Если хостнейм больше не активен, например потому что клиент изменил свои DNS, клиенту нужно разместить новый токен, а отправить его ему должны вы. Wildcard-сертификаты можно продлить только через TXT, и именно это автоматизирует Delegated DCV.

Клиенты на другом CDN или на Cloudflare

Cloudflare сообщает, что пользовательские хостнеймы, использующие другой CDN, несовместимы, если этот CDN скрывает DNS-записи. Клиенты, чьи домены находятся на Cloudflare, создают обратную проблему: если они уходят, а вы не удалили их хостнейм, он может продолжать направлять трафик на ваш сервис даже после смены DNS.

Workers перед путями валидации

Если резервным origin служит Worker, он должен пропускать /.well-known/pki-validation/* и /.well-known/acme-challenge/* без изменений. Универсальный маршрут, отвечающий страницей 404 вашего приложения, ломает HTTP-валидацию.

Продуктовая работа вокруг этого

  • Контроль тарифов. Решите, в какие ваши тарифы входят пользовательские домены и в каком количестве, и проверяйте это до обращения к Cloudflare. Его квота и порог — это верхние пределы, а не ваша ценовая политика.
  • Экран подключения. Одно поле ввода. Приводите значение к нижнему регистру, убирайте протокол и путь, отклоняйте домены без поддомена, если вы не приобрели apex proxying, и отклоняйте имя вашей собственной зоны: Cloudflare предупреждает, что её нельзя создавать как пользовательский хостнейм. Затем покажите точную запись, которую нужно добавить, с кнопкой копирования.
  • Два статуса простым языком. Хостнейм и сертификат проверяются отдельно, поэтому показывайте оба. Переводите ssl.validation_errors в инструкции: «CAA-записи вашего домена не разрешают наш центр сертификации; добавьте эту запись» лучше, чем «pending_validation». Ответ на создание может ещё не содержать записей для валидации, поэтому запросите хостнейм повторно через небольшую паузу. Вебхук-уведомления Cloudflare сообщают о событиях валидации и выпуска, а это лучше, чем опрос.
  • Мониторинг продления. Ежедневная задача, которая отмечает хостнеймы с неактивным сертификатом или с DNS, больше не указывающими на вас, чтобы ваша команда узнала об этом раньше клиента.
  • Очистка. Удаляйте хостнеймы, которые так и не прошли валидацию, и хостнеймы ушедших клиентов. Оба вида тарифицируются до удаления.
  • Изоляция тенантов. Определяйте тенанта только по активным хостнеймам в вашей базе данных. Если тенантам также выдаются поддомены вашего домена, в документации Vercel по доменам отмечено, что cookie, установленный одним тенантом для родительского домена, доходит до остальных, поэтому держите панель управления и вход на отдельном домене.
  • Руководство для поддержки. Короткая страница для вашей команды, сопоставляющая каждую ошибку с тем, кто её исправляет: отсутствующий CNAME, CAA, DNSSEC и SERVFAIL — на стороне клиента; токены, лимиты центра сертификации и маршруты Worker — на вашей.

Именно такой работой Dardo занимается в разработке веб-приложений, а white-label клиентские порталы — то, где пользовательские домены просят чаще всего.

Альтернативы: Vercel и Netlify

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

Cloudflare for SaaSVercelNetlify
Лимиты доменов100 включено, до 50 000 на Free, Pro и Business50 на проект на Hobby; «Unlimited» на Pro и Enterprise с мягкими лимитами 100 000 и 1 000 000«Мы рекомендуем назначать не более 50 псевдонимов доменов на один сайт»
Домены без поддоменаДополнение для EnterpriseA-запись со значением с карточки домена проектаALIAS, ANAME или сглаженный CNAME, либо A-запись как запасной вариант
СертификатыАвтоматически, два на хостнейм; собственные сертификаты на EnterpriseАвтоматически после подтверждения домена; собственные сертификаты на EnterpriseАвтоматический Let's Encrypt; собственные сертификаты продлеваются вручную
Wildcard-доменыEnterpriseНужны серверы имён Vercel или делегированный _acme-challengeАвтоматически для доменов на Netlify DNS
Создан дляМножества клиентских доменов в одной зонеМультитенантных платформ с REST API и SDKНе более нескольких десятков доменов на сайт

Поддержка доменов без поддомена у Vercel — самое заметное отличие: клиенты могут направить на него такой домен A-записью. Учтите, что тариф Hobby по правилам добросовестного использования Vercel ограничен «только некоммерческим, личным использованием», поэтому платному SaaS нужно начинать с Pro. Рекомендация Netlify не более 50 псевдонимов делает его плохим выбором для одного развёртывания, обслуживающего сотни клиентских доменов.

Когда это стоит создавать

Если просят два-три клиента, добавьте их хостнеймы в панели Cloudflare и ведите чек-лист. Создавайте самообслуживаемый процесс, когда пользовательские домены становятся частью продаваемого вами тарифа или white-label-предложения. Если клиентам нужны домены без поддомена или wildcard-домены в большом масштабе, обсудите Enterprise с Cloudflare до того, как проектировать систему вокруг лимитов.

Если вы хотите встроить такой процесс в свой продукт — со статусами, уведомлениями и подсказками для поддержки, — расскажите нам о своём приложении.