Вопрос или проблема
Я только что купил новый домен в GoDaddy
, давайте назовем его example.com
. Я хочу подключить этот домен к своему Heroku
приложению, поэтому я зашел в настройки в Heroku
и в разделе Domains
добавил следующие опции для моего домена:
www.example.com
example.com
Затем, в GoDaddy
, в управлении DNS я создал две записи CNAME
Я использовал DNS-адреса, которые получил от Heroku
для каждой из записей.
Запись с подстановочным знаком получила DNS-адрес от example.com
, а www
получила DNS-адрес от www.example.com
.
Теперь я хотел протестировать эту настройку, поэтому попробовал использовать GET
запрос в Postman. Я попробовал http://www.example.com
и получил ответ 200, который ожидал. Однако,
когда я попробовал http://example.com
(без префикса www
), я не получил никакого ответа, а вместо этого возникла ошибка:
Ошибка: write EPROTO 140275225778376:error:10000458:SSL routines:OPENSSL_internal:TLSV1_ALERT_UNRECOGNIZED_NAME:../../third_party/boringssl/src/ssl/tls_record.cc:594:SSL alert number 112
Точно ли эта настройка, о которой я упоминаю, корректна? Если я хочу поддерживать оба домена с префиксом www
и без него, как правильно это настроить?
Вы не указали DNS-запись для голого домена (также называемого “апекс домена”). Вы можете добавить запись для апекса домена, оставив поле поддомена пустым или введя @
для поддомена. Я не уверен, что будет работать в GoDaddy.
Проблема в том, что вы не можете использовать запись CNAME
для апекса домена. Вы можете использовать только записи A
там. Heroku требует, чтобы вы указывали на их серверы по имени, а не по IP-адресу, потому что они могут изменить IP-адрес вашего хостинга в любое время без предварительного уведомления. См. Ограничения DNS A-записей | Центр разработки Heroku.
Чтобы указать голый домен на Heroku для хостинга, вам нужно использовать DNS-поставщика, который поддерживает ввод имени в апекс, но обслуживает его как запись A
по IP-адресу. Этот тип синтетической записи обычно называется записью ALIAS
или ANAME
DNS.
К сожалению, GoDaddy не предлагает записи ALIAS
или ANAME
в своем DNS-хостинге. Вам нужно либо позволить GoDaddy перенаправить голый домен на www
, либо найти нового DNS-хоста.
Я бы не рекомендовал позволять GoDaddy перенаправлять ваш голый домен на www
. Есть несколько проблем:
- Перенаправление GoDaddy было немного сломано в течение многих лет так, что это наносит вред SEO. См. 301 перенаправление GoDaddy имеет какое-то странное случайное URL, убивает ссылочный вес?
- GoDaddy не предлагает HTTPS-перенаправление для доменов, так что
https://example.com/
никогда не будет работать. - Я не уверен, что вы можете настроить GoDaddy для перенаправления только апекса домена без перенаправления поддоменов.
Вместо этого вам следует выбрать другой DNS-хост, который предлагает функциональность ANAME
/ALIAS
и перенести свой DNS-хостинг, изменив NS
записи в GoDaddy, чтобы указать на вашего нового DNS-хоста. См. Инструкции GoDaddy по редактированию NS записей
Ответ или решение
Чтобы связать ваш домен, зарегистрированный в GoDaddy, с приложением на Heroku и обеспечить доступ как с префиксом «www», так и без него, необходимо выполнить несколько шагов. Процесс может показаться сложным, но я разложу его по этапам с учётом всех нюансов.
1. Добавление домена в Heroku
Для начала необходимо добавить оба варианта вашего домена в приложение: с префиксом «www» и без него. Перейдите в настройки вашего приложения на платформе Heroku и в разделе «Domains» добавьте:
www.example.com
example.com
Эти действия зададут желаемые доменные имена для вашего приложения.
2. Настройка DNS в GoDaddy
После добавления домена в Heroku пришло время настроить DNS-записи в GoDaddy. Однако важно понимать, что для доменной зоны (или «апекса») вы не сможете использовать CNAME-запись. Это связано с тем, что стандартные DNS-записи имеют ограничения.
Шаги для настройки DNS:
-
CNAME для www.: Создайте CNAME-запись для поддомена
www
, указывающую на DNS-требования Heroku.Например:
- Тип: CNAME
- Имя: www
- Указывает на: DNS-цель, предоставленную Heroku (например,
yourapp.herokuapp.com
).
-
A запись для апекса: Для главного домена (
example.com
) вам нужно создать A-запись. Однако GoDaddy не поддерживает ALIAS или ANAME записи, которые могли бы указать на имя хоста. Это значит, что A-запись должна указывать на IP-адрес. Если вы не укажете A-запись, домен без префикса «www» не будет работать.Например:
- Тип: A
- Имя: @
- Указывает на: IP-адрес, полученный от Heroku. Однако это не оптимально, поскольку Heroku может поменять свои IP-адреса без предварительного уведомления.
3. Альтернативные решения
Использование стороннего DNS-провайдера
Так как GoDaddy не предоставляет возможности использовать ALIAS или ANAME записи, вам будет выгоднее перейти к другому DNS-хостингу, который предлагает эту функциональность. Популярные провайдеры, такие как Cloudflare или AWS Route 53, поддерживают такие записи.
Шаги по переходу:
-
Выберите новый DNS-хост: Например, Cloudflare, который предлагает услуги на уровне DNS и имеет поддержку SSL.
-
Измените NS-записи в GoDaddy: Перейдите в настройки вашего домена в GoDaddy и измените NS-записи, чтобы они указывали на новый DNS-провайдер. Следуйте инструкциям, предоставленным вашим новым провайдером.
-
Настройка ALIAS или ANAME: Создайте ALIAS или ANAME запись для домена
example.com
, указывая на ваше приложение на Heroku, и оставьте CNAME дляwww.example.com
.
4. Проверка настройки
После внесения всех изменений вам необходимо проверить корректность работы обеих версий домена. Для этого повторите запросы с помощью Postman или просто попробуйте открыть оба адреса (http://example.com
и http://www.example.com
) в браузере.
Заключение
Следуя данным шагам, вы сможете успешно связать ваш домен с приложением на Heroku и обеспечить доступ как через www
, так и через прямой домен без этого префикса. Помните, что надежный хостинг и корректная настройка DNS являются ключом к стабильной работе вашего веб-приложения.