Вопрос или проблема
У меня есть приложение на Heroku, и мне нужно настроить для него домен. Обычный способ настройки – использовать CNAME-запись, чтобы указать, что этот домен является псевдонимом для <your-domain-name>.herokuapp.com
. Дело в том, что я также хочу добавить интеграции с Google Webmasters и Яндекс.Метрикой, и самый простой способ – добавить две TXT-записи для домена. Я настроил его так:
Мне нужно иметь 2 TXT-записи на http://www.cscombo.com, но, по всей видимости, это не сработает из-за этого: https://stackoverflow.com/questions/34613083/cname-and-txt-record-for-same-subdomain-not-working
Моя текущая настройка работает неправильно, потому что добавление http://www.cscombo.com в Google Webmasters не сработает (поскольку TXT-запись для субдомена www не существует), а добавление http://cscombo.com (версия без www) сработает (TXT-запись для этого субдомена существует), но в этом случае Google Webmasters не сможет прочитать sitemap.txt
и robots.txt
(потому что они оба перенаправляются на www-версию сайта). Та же история с Яндекс.Метрикой.
Итак, вопрос: есть ли способ добавить CNAME и TXT-записи для одного и того же субдомена?
Вы не можете. Как говорится в RFC1034 в s3.6.2,
Если CNAME RR присутствует в узле, другие данные присутствовать не должны
Если вам нужна запись TXT
для (например) www.example.com
, вы не можете иметь запись CNAME
для www.example.com
и должны найти другой способ достичь желаемого. Это может означать мониторинг example.herokuapp.com
самостоятельно, и при изменении IP-адреса обновление ваших собственных записей A
для www.example.com
.
Редактирование из будущего: в своем (отличном) блоге системного администратора, Крис Зибенман дает очень хороший анализ почему это запрещено, плюс плюсы и минусы обходных путей, специфичных для поставщика, таких как записи ALIAS (оказывается, они делают именно то, что я описал выше).
Лично мне потому что RFC так говорят кажется более приемлемым ответом, чем Крису, но, с другой стороны, я подозреваю, что мой мозг хранит нечеткий образ Джона Постела, регулярно поднимающегося на гору Синай, каждый раз возвращаясь с последними RFC в полу-переносимом формате.
Обходным решением может быть использование записи ALIAS
, если ваш регистратор поддерживает ее. Это тип записей, который обеспечивает поведение, похожее на CNAME, на доменах верхнего уровня. Подробнее читайте: https://support.dnsimple.com/articles/alias-record/#whats-an-alias-record
Например, вы можете создать запись ALIAS
для @
, которая указывает на myapp.herokuapp.com
. Это позволит вам также иметь записи TXT
для @
в том же доменном имени.
.
Ответ или решение
Добавление обеих CNAME и TXT записей DNS для одного поддомена может вызвать определенные сложности, учитывая, что существует правило, согласно которому поддомен, имеющий CNAME-запись, не может содержать другие типы записей, включая TXT. Это ограничение связано с механикой работы самого DNS-сервиса, как подробно описано в RFC1034, разделе 3.6.2.
Проблема:
У вас есть приложение на Heroku, которое требует добавления CNAME-записи для домена, чтобы указать, что этот домен является алиасом для <ваш-домен>.herokuapp.com
. Однако вы также хотите интегрировать Google Webmasters и Yandex.Metrika, что требует добавления TXT-записей для того же поддомена.
Причина:
Когда CNAME-запись присутствует в узле DNS, любая другая тип записи в этом же узле запрещена. Это значит, что попытка добавить TXT-запись наряду с CNAME-записью для поддомена ведёт к конфликту и недоступности необходимых записей для сервисов, таких как Google или Yandex.
Возможные решения:
-
Использование ALIAS-записи:
- Если ваш регистратор поддерживает ALIAS-записи, они могут выступать как аналог CNAME-записей, но без ограничения на добавление других записей. Это может решить вашу задачу. ALIAS-записи обрабатываются на уровне провайдера DNS, предоставляя необходимое поведение CNAME для API или приложения в контексте имени домена.
- Вы можете создать ALIAS-запись для корня домена (
@
), направляющую наmyapp.herokuapp.com
. Это устранит конфликт и обеспечит возможность добавления TXT-записей для домена.
-
Настройка A-записи вручную:
- Если ALIAS-записи недоступны, другой вариант заключается в отслеживании IP-адреса домена
example.herokuapp.com
и добавлении A-записей. Это потребует периодического обновления записей при изменении IP-адреса, что может быть неудобно, но будет работать.
- Если ALIAS-записи недоступны, другой вариант заключается в отслеживании IP-адреса домена
-
Создание отдельных поддоменов:
- Другой подход — использование разных поддоменов для различных целей (например,
verify.example.com
для TXT-проверок), однако это может потребовать дополнительной настройки и редиректов.
- Другой подход — использование разных поддоменов для различных целей (например,
Заключение:
Для вашей задачи рекомендовано исследовать возможность использования ALIAS-записей, что в большинстве случаев решит проблему с минимальными усилиями. Не забудьте проверить, поддерживает ли ваш текущий регистратор этот тип записи. При необходимости, обновите или перенесите DNS на провайдера, предоставляющего такие функции.