web-dev-qa-db-fra.com

Comment configurer les pages GitHub pour rediriger les requêtes DNS d'un sous-domaine (par exemple www) vers le domaine de premier niveau (TLD, enregistrement Apex)?

Comment configurer un fournisseur de services DNS de telle manière que les demandes aux deux www.example.com et example.com afficherait un site Web hébergé sur les pages GitHub? La barre d'adresse de mon navigateur doit contenir example.com à l'ouverture du site.

Mon fournisseur de services DNS est gandi.net. Il ne prend pas en charge le type d'enregistrement DNS ALIAS.

44
Jay Zelenkov

Réponse courte

Étape 1: Ajoutez un nouveau fichier CNAME à votre référentiel GitHub Pages contenant une seule ligne: votre nom de domaine de premier niveau.

Par exemple.:

example.com

Étape 2: [Facultatif] mais fortement recommandé

2.1: Supprimez tous les autres enregistrements de niveau supérieur (préfixés par @) de type A de votre configuration DNS.

2.2: Supprimez un enregistrement CNAME pour le domaine de second niveau www s'il est présent.

Étape 3: Ajoutez ces 3 entrées tout en haut de votre configuration DNS:

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

Remplacer your_github_username avec votre nom d'utilisateur GitHub réel.

Étape 4: Attendez que vos modifications DNS se propagent.

Les modifications DNS ne sont pas effectives immédiatement. Ils peuvent prendre jusqu'à une journée complète pour se propager.


Longue réponse

Cette question a deux côtés. L'un est la configuration DNS elle-même. Un autre est la façon dont GitHub Pages transmet les requêtes HTTP.

Nous devons savoir quelques choses pour comprendre ce que GitHub essaie de dire dans leur documentation.

Types d'entrée DNS

Il existe deux types d'enregistrements DNS qui nous intéressent: CNAME et A.

A est également appelé Apex ou parfois root entry. Il transmet les requêtes à une adresse IP fixe fixe . CNAME entrée transmet les demandes à une URL spécifiée (URL en texte brut valide réelle, pas une adresse IP).

Équilibrage de charge DNS

GitHub possède une adresse URL centrale qui accepte toutes les demandes DNS pour les pages GitHub: http://username.github.io. Cette URL est résolue en différentes adresses IP en fonction de votre emplacement géographique. Le site Web hébergé sur les pages GitHub est une simple collection de fichiers HTML, CSS et JS. GitHub distribue ces fichiers sur différents serveurs à travers le monde. De sorte que lorsque votre navigateur envoie une demande depuis l'Europe, il reçoit des données d'un serveur en Europe. Il en va de même pour les demandes d'Asie et des États-Unis.

Ce que GitHub essaie de dire

Étant donné que les enregistrements A dans DNS doivent contenir des adresses IP, et ils doivent être 192.30.252.153 ou 192.30.252.154, il n'existe aucun moyen de transférer les demandes vers un serveur situé quelque part en Europe ou en Asie. Votre site Web hébergé sur GitHub Pages sera téléchargé à partir d'un serveur central GitHub Pages. Il existe un risque mineur que si les deux serveurs DNS GitHub Pages (x.x.x.153 et x.x.x.154) sera désactivé pour une raison quelconque, tous les domaines personnalisés qui utilisent des adresses IP fixes GitHub Pages ne seront pas accessibles (leurs requêtes DNS ne seront pas résolvables).

C'est pourquoi GitHub suggère fortement d'utiliser un domaine de second niveau pour vos pages GitHub (par exemple blog.example.com) ou utilisez un fournisseur de services DNS qui prend en charge un type d'enregistrement ALIAS qui agit comme A enregistrement mais transmet la demande à une adresse URL (par exemple username.github.io) au lieu d'une adresse IP fixe.

Comment GitHub Pages traite les requêtes HTTP

Après une demande DNS pour your_github_username.github.io. est résolu en une adresse IP, par exemple 192.30.252.153 votre navigateur envoie une demande HTTP à ce serveur avec un en-tête HTTP Host. Vous trouverez ci-dessous curl exemples qui chargent le même site Web (ces exemples peuvent ne pas fonctionner si vous êtes derrière un serveur proxy):

$> 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/

De cette façon, les serveurs GitHub Pages savent quel site utilisateur utiliser.

Le serveur GitHub Pages redirigera automatiquement la requête HTTP vers le domaine de premier niveau si votre fichier CNAME contient example.com mais www.example.com Est demandé.

Il en va de même si votre fichier CNAME contient www.example.com mais l'en-tête Host dans la requête HTTP contient example.com.

Pourquoi ne puis-je pas ajouter une entrée d'enregistrement CNAME qui accepte une demande de niveau supérieur (@) à ma configuration DNS?

Citation de la documentation des pages GitHub:

Avertissement : Ne créez pas d'enregistrement CNAME pour votre domaine d'apex personnalisé! Cela pourrait entraîner des problèmes avec d'autres services, tels que la messagerie électronique, sur ce domaine.


Les références:

Configuration d'un domaine personnalisé avec GitHub Pages

Mon domaine personnalisé ne fonctionne pas

Impossible d'accéder à mon site Web GitHub Pages par adresse IP

101
Jay Zelenkov