Ответ 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-адресу