web-dev-qa-db-ja.com

DNSリクエストをサブドメイン(wwwなど)からトップレベルドメイン(TLD、Apexレコード)にリダイレクトするようにGitHubページを設定するにはどうすればよいですか?

両方にリクエストするようにDNSサービスプロバイダーを設定する方法www.example.comおよびexample.comは、GitHubページでホストされているWebサイトを表示しますか?ブラウザのアドレスバーにはexample.comウェブサイトが開かれたとき。

DNSサービスプロバイダーはgandi.netALIAS DNSレコードタイプはサポートしていません。

44
Jay Zelenkov

短い答え

ステップ1:新しいファイルCNAMEをGitHub Pagesリポジトリに追加します。これには、トップレベルドメイン名が1行のみ含まれます。

例えば。:

_example.com
_

ステップ2:[オプション]を強くお勧めします

2.1:DNS構成からタイプAの他のすべての最上位レコード(接頭辞@)を削除します。

2.2:第2レベルドメインCNAMEwwwレコードが存在する場合は削除します。

ステップ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の変更はすぐには有効になりません。伝播するのに最大で1日かかる場合があります。


長い答え

この問題には2つの側面があります。 1つはDNS構成自体です。もう1つは、GitHub PagesがHTTPリクエストを転送する方法です。

GitHubがドキュメントで何を言おうとしているのかを理解するには、いくつかのことを知る必要があります。

DNSエントリタイプ

興味のあるDNSレコードには、CNAMEAの2つのタイプがあります。

Aは、Apexとしても知られていますが、_root entry_とも呼ばれます。指定されたfixedIPアドレスに要求を転送します。 CNAMEエントリは、指定されたURL(IPアドレスではなく、実際の有効なプレーンテキストURL)に要求を転送します。

DNSロードバランシング

GitHubには、GitHubページに対するすべてのDNS要求を受け入れる1つの中央URLアドレスがあります:_http://username.github.io_。そのURLは、地理的な場所に基づいて異なるIPアドレスに解決されます。 GitHub PagesでホストされるWebサイトは、HTMLCSS、およびJSファイルの単純なコレクションです。 GitHubは、これらのファイルを世界中のさまざまなサーバーに配布します。ブラウザがヨーロッパからリクエストを送信すると、ヨーロッパのサーバーからデータを受信します。アジアおよび米国からの要求についても同様です。

GitHubが言おうとしていること

DNSのAレコードにはIPアドレスが含まれている必要があり、_192.30.252.153_または_192.30.252.154_のいずれかでなければならないため、ヨーロッパまたはアジアのどこかにあるサーバーに要求を転送する方法はありません。 GitHub PagesでホストされているWebサイトは、中央のGitHub Pagesサーバーからダウンロードされます。何らかの理由でGitHub Pages DNSサーバー(_x.x.x.153_および_x.x.x.154_)の両方がダウンした場合、固定GitHub Pages IPアドレスを使用するすべてのカスタムドメインにアクセスできなくなる(それらのDNS要求解決できません)。

これが、GitHubがGitHubページに第2レベルドメイン(_blog.example.com_など)を使用するか、ALIASレコードとして機能するがURLアドレスに転送するレコードタイプAをサポートするDNSサービスプロバイダーを使用することを強く推奨する理由です(たとえば、固定IPアドレスの代わりに_username.github.io_)。

GitHub PagesがHTTPリクエストを処理する方法

_your_github_username.github.io._のDNS要求がIPアドレスに解決された後、たとえば_192.30.252.153_ブラウザは、HTTPヘッダーHostを使用してそのサーバーにHTTP要求を送信します。以下は、同じWebサイトをロードする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サーバーはどのユーザーWebサイトを提供するかを認識します。

CNAMEファイルに_example.com_が含まれているが_www.example.com_が要求されている場合、GitHub PagesサーバーはHTTP要求を自動的にトップレベルドメインにリダイレクトします。

CNAMEファイルに_www.example.com_が含まれているが、HTTP要求のヘッダーHostに_example.com_が含まれている場合も同じことが当てはまります。

DNS構成にトップレベルのリクエスト(_@_)を受け入れるCNAMEレコードエントリを追加できないのはなぜですか?

GitHub Pagesドキュメントからの引用:

警告:カスタムApexドメインのCNAMEレコードを作成しないでください!これを行うと、そのドメインのメールなどの他のサービスで問題が発生する場合があります。


参照:

GitHubページでカスタムドメインをセットアップする

カスタムドメインが機能していません

IPアドレスでGitHub Pages Webサイトにアクセスできません

101
Jay Zelenkov