DNSリクエストをサブドメイン(wwwなど)からトップレベルドメイン(TLD、Apexレコード)にリダイレクトするようにGitHubページを設定するにはどうすればよいですか?
両方にリクエストするようにDNSサービスプロバイダーを設定する方法www.example.com
およびexample.com
は、GitHubページでホストされているWebサイトを表示しますか?ブラウザのアドレスバーにはexample.com
ウェブサイトが開かれたとき。
DNSサービスプロバイダーはgandi.net
。 ALIAS
DNSレコードタイプはサポートしていません。
短い答え
ステップ1:新しいファイルCNAME
をGitHub Pagesリポジトリに追加します。これには、トップレベルドメイン名が1行のみ含まれます。
例えば。:
_example.com
_
ステップ2:[オプション]を強くお勧めします
2.1:DNS構成からタイプA
の他のすべての最上位レコード(接頭辞@)を削除します。
2.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の変更はすぐには有効になりません。伝播するのに最大で1日かかる場合があります。
長い答え
この問題には2つの側面があります。 1つはDNS構成自体です。もう1つは、GitHub PagesがHTTPリクエストを転送する方法です。
GitHubがドキュメントで何を言おうとしているのかを理解するには、いくつかのことを知る必要があります。
DNSエントリタイプ
興味のあるDNSレコードには、CNAME
とA
の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サイトは、HTML
、CSS
、および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レコードを作成しないでください!これを行うと、そのドメインのメールなどの他のサービスで問題が発生する場合があります。