← Cloudflare for Platforms / cloudflare-for-platforms / cloudflare-for-saas / domain-support / hostname-validation
Миграция без простоя
Если конечный клиент уже работает на другой CDN, переключение его CNAME-записи на ваш резервный исходный сервер Cloudflare создаёт короткое окно, в течение которого Cloudflare ещё не может проксировать его трафик. Предварительная проверка позволяет подтвердить владение именем хоста и при необходимости заранее выпустить TLS-сертификат до переключение DNS, поэтому миграция проходит незаметно для пользователей.
Последовательность миграции
- Создайте пользовательское имя хоста через API.
- Выполните предварительную проверку владения именем хоста с помощью HTTP-токена или DNS-записи TXT.
- Заранее выпустите сертификат TLS до переключения DNS.
- Убедитесь, что имя хоста
active. - Обновите CNAME конечного клиента: трафик переключается без простоя.
Шаг 1: Создайте пользовательское имя хоста
Вызовите Create Custom Hostname endpoint. Обратите внимание на ownership_verification и ownership_verification_http полей в ответе, они понадобятся вам на следующем шаге.
curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_hostnames \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"hostname": "app.example.com",
"ssl": {
"method": "http",
"type": "dv",
"settings": {
"http2": "on",
"min_tls_version": "1.2"
}
}
}'{
"result": {
"id": "24c8c68e-bec2-49b6-868e-f06373780630",
"hostname": "app.example.com",
"status": "pending",
"verification_errors": ["custom hostname does not CNAME to this zone."],
"ownership_verification": {
"type": "txt",
"name": "_cf-custom-hostname.app.example.com",
"value": "0e2d5a7f-1548-4f27-8c05-b577cb14f4ec"
},
"ownership_verification_http": {
"http_url": "http://app.example.com/.well-known/cf-custom-hostname-challenge/24c8c68e-bec2-49b6-868e-f06373780630",
"http_body": "48b409f6-c886-406b-8cbc-0fbf59983555"
},
"created_at": "2020-03-04T20:06:04.117122Z"
}
} verification_errors поле покажет custom hostname does not CNAME to this zone на этом этапе, это ожидаемо. Ошибка исчезнет после завершения предварительной проверки.
Шаг 2: Предварительно подтвердите владение именем хоста
Выберите метод, который подходит для ситуации вашего конечного клиента.
Вариант A: токен HTTP (конечный клиент не управляет DNS)
Используйте этот метод, если конечный клиент не может обновить свой авторитетный DNS или если вы хотите выполнить проверку самостоятельно.
-
Скопируйте
http_urlиhttp_bodyизownership_verification_httpобъект в ответе Create Custom Hostname. -
Попросите конечного клиента разместить
http_bodyзначение наhttp_urlпуть на своём исходном сервере. Например, в nginx:пример nginxlocation /.well-known/cf-custom-hostname-challenge/24c8c68e-bec2-49b6-868e-f06373780630 { return 200 "48b409f6-c886-406b-8cbc-0fbf59983555\n"; }Cloudflare сканирует этот URL-адрес с помощью
User-Agent: Cloudflare Custom Hostname Verification. Origin-сервер должен ответить200статус и точное значение токена в теле запроса. -
Подождите несколько минут, пока Cloudflare просканирует токен. Статус имени хоста изменится с
pendingкactiveкак только владение будет подтверждено.
Вариант B: запись TXT (конечный клиент управляет DNS)
Используйте этот метод, если конечный клиент может добавить запись DNS у своего авторитетного DNS-провайдера.
-
Скопируйте
nameиvalueизownership_verificationобъект в ответе Create Custom Hostname. -
Попросите конечного клиента добавить
TXTзапись у своего DNS-провайдера:Тип Название Значение TXT_cf-custom-hostname.app.example.com0e2d5a7f-1548-4f27-8c05-b577cb14f4ec -
Подождите несколько минут, пока Cloudflare обнаружит запись. Статус имени хоста изменится на
activeкак только владение будет подтверждено. -
Как только имя хоста станет активным, конечный клиент сможет удалить запись TXT.
Шаг 3: Заранее выпустите сертификат TLS
Заблаговременный выпуск сертификата исключает ошибку TLS при переключении. Без этого шага сертификат невозможно выпустить, пока запись CNAME конечного клиента не начнёт указывать на Cloudflare, а значит, ssl.status останется pending путём изменения DNS. Выберите один из следующих способов:
- Делегированная DCV - Разовая запись CNAME делегирует
_acme-challengeв вашу зону SaaS, и Cloudflare будет автоматически заниматься всеми последующими продлениями сертификата. Конечный клиент может разместить делегирующую CNAME-запись в своём авторитативном DNS, либо, если вы сами обслуживаете DNS для своих клиентов, можете разместить её в собственной зоне. - Проверка TXT - Попросите конечного клиента добавить
TXTзапись в своём авторитетном DNS. Требуется для подстановочных пользовательских имён хостов. - Ручная проверка HTTP - Разместите файл токена DCV по
/.well-known/путь на исходном сервере. От конечного клиента никаких действий не требуется.
Шаг 4: Убедитесь, что имя хоста активно
Перед обновлением DNS убедитесь, что имя хоста и сертификат готовы.
curl https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_hostnames/{custom_hostname_id} \
--header "Authorization: Bearer <API_TOKEN>"{
"result": {
"id": "24c8c68e-bec2-49b6-868e-f06373780630",
"hostname": "app.example.com",
"status": "active",
"ssl": {
"status": "active"
}
}
}Дождитесь, пока оба result.status и result.ssl.status являются active прежде чем продолжить. Если что-либо из этого по-прежнему pending, подождите и повторите запрос.
Шаг 5: Обновите CNAME-запись конечного клиента
Как только result.status это active (и ssl.status это active тоже, если вы заранее выпустили сертификат в шаге 3), попросите конечного клиента обновить его CNAME-запись так, чтобы она указывала на ваш резервный исходный сервер:
| Тип | Название | Значение |
|---|---|---|
CNAME |
app |
fallback.yoursaaszone.com |
Трафик начнёт проксироваться через Cloudflare сразу после распространения записей DNS. Поскольку имя хоста уже прошло проверку, а сертификат уже был выпущен, при переходе не возникает простоев или ошибок сертификата.