Подтвердить что ты не робот

Как настроить GitHub Pages для перенаправления DNS-запросов с субдомена (например, www) в домен верхнего уровня (TLD, запись Apex)?

Как настроить поставщика услуг DNS таким образом, чтобы при запросах к www.example.com и example.com отображался веб-сайт, размещенный на страницах GitHub? Адресная строка моего браузера должна содержать example.com при открытии сайта.

Мой поставщик услуг DNS - gandi.net. Он не поддерживает ALIAS записи ALIAS DNS.

4b9b3361

Ответ 1

Короткий ответ

Шаг 1. Добавьте новый файл CNAME в репозиторий GitHub Pages, содержащий только одну строку: ваше доменное имя верхнего уровня.

например:.

example.com

Шаг 2: [Необязательно], но настоятельно рекомендуется

2.1: Удалите все остальные записи верхнего уровня (с префиксом @) типа A из вашей конфигурации DNS.

2.2: удалите запись CNAME для домена второго уровня www, если она присутствует.

Шаг 3. Добавьте эти 3 записи в самую верхнюю часть вашей конфигурации DNS:

@        A        192.30.252.153
@        A        192.30.252.154
www      CNAME    your_github_username.github.io.

Замените your_github_username своим фактическим именем пользователя GitHub.

Шаг 4. Подождите, пока ваши изменения DNS не будут распространяться.

Изменения DNS не действуют немедленно. Они могут занимать целый день для распространения.


Длинный ответ

Эта проблема имеет две стороны. Одна из них - сама конфигурация DNS. Еще один способ, которым страницы GitHub перенаправляют HTTP-запросы.

Нам нужно знать несколько вещей, чтобы понять, что GitHub пытается сказать в своей документации.

Типы записей DNS

Для нас интересны два типа DNS-записей: CNAME и A.

A также известен как Apex или иногда как root entry. Он перенаправляет запросы на указанный фиксированный IP-адрес. CNAME запись пересылает запросы на указанный URL (фактический действительный URL открытого текста, а не IP-адрес).

Балансировка нагрузки DNS

GitHub имеет один центральный URL-адрес, который принимает все DNS-запросы для GitHub Pages: http://username.github.io. Этот URL-адрес разрешен для разных IP-адресов на основе вашего географического местоположения. Веб-сайт, размещенный на страницах GitHub, представляет собой простой набор файлов HTML, CSS и JS. GitHub распространяет эти файлы на разные серверы по всему миру. Таким образом, когда ваш браузер отправляет запрос из Европы, он получает данные с сервера в Европе. То же самое справедливо для запросов из Азии и США.

Что GitHub пытается сказать

Поскольку A записи в DNS должны содержать IP-адреса, и они должны быть либо 192.30.252.153, либо 192.30.252.154, нет способа перенаправления запросов на сервер, расположенный где-то в Европе или Азии. Ваш сайт, размещенный на страницах GitHub, будет загружен с центрального сервера GitHub Pages. Существует незначительный риск того, что если оба DNS-сервера GitHub Pages (x.x.x.153 и x.x.x.154) по какой-либо причине будут недоступны, все пользовательские домены, которые используют фиксированные IP-адреса GitHub Pages, не будут доступны (их запросы DNS не будут разрешаемы).

Вот почему GitHub настоятельно предлагает либо использовать домен второго уровня для ваших страниц GitHub (например, blog.example.com), либо использовать поставщика услуг DNS, который поддерживает тип записи ALIAS, который действует как запись A, но пересылает запросите URL-адрес (например, username.github.io) вместо фиксированного IP-адреса.

Как страницы GitHub обрабатывают HTTP-запросы

После того, как запрос DNS для your_github_username.github.io. будет разрешен в IP-адрес, например. 192.30.252.153 ваш браузер отправляет HTTP-запрос на этот сервер с HTTP-заголовком Host. Ниже приведены примеры curl, загружающие один и тот же сайт (эти примеры могут не работать, если вы находитесь за прокси-сервером):

$> curl --header "Host: your_github_username.github.io" http://192.30.252.153/
$> curl --header "Host: www.example.com" http://192.30.252.153/
$> curl --header "Host: example.com" http://192.30.252.153/

Таким образом серверы GitHub Pages знают, какой веб-сайт пользователя должен обслуживать.

Сервер GitHub Pages автоматически перенаправляет HTTP-запрос в домен верхнего уровня, если ваш CNAME файл содержит example.com, но запрашивается www.example.com.

То же самое верно, если ваш файл CNAME содержит www.example.com, но заголовок Host в HTTP-запросе содержит example.com.

Почему я не могу добавить запись записи CNAME, которая принимает запрос верхнего уровня (@) в мою конфигурацию DNS?

Цитата из документации GitHub Pages:

Предупреждение. Не создавайте запись CNAME для своего пользовательского домена apex! Это может привести к проблемам с другими службами, такими как электронная почта, в этом домене.


Ссылки:

Настройка настраиваемого домена с помощью страниц GitHub

Мой пользовательский домен не работает

Невозможно получить доступ к сайту GitHub Pages по IP-адресу