Comment configurer Github Pages pour redirect les requêtes DNS d’un sous-domaine (par exemple, www) vers un domaine de premier niveau (TLD, enregistrement Apex)?

Comment configurer un fournisseur de services DNS de manière à ce que les demandes www.example.com à la fois à www.example.com et à example.com afficheraient un site Web hébergé sur le serveur GitHub Pages? La barre d’adresse de mon navigateur doit contenir example.com lorsque le site est ouvert.

Mon fournisseur de service DNS Il ne prend pas en charge le type d’enregistrement DNS ALIAS .

Réponse courte

Etape 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 (avec le préfixe @) de type A de votre configuration DNS.

2.2: Supprimer un CNAME pour le domaine de deuxième niveau www s’il est présent.

Étape 3: Ajoutez ces 3 entrées au sumt de votre configuration DNS:

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

Remplacez votre nom d’utilisateur_github par votre nom d’utilisateur GitHub actuel.

É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

Ce problème a deux aspects. L’un est la configuration DNS elle-même. Un autre est la façon dont GitHub Pages transfère les requêtes HTTP.

Nous devons connaître quelques points pour comprendre ce que GitHub essaie de dire dans sa documentation.

Types d’entrées DNS

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

A est également appelé Apex ou parfois comme root entry . Il transmet les demandes à une adresse IP fixe spécifiée. CNAME entrée CNAME transfère les demandes à une URL spécifiée (URL de texte brut valide, pas une adresse IP).

Équilibrage de charge DNS

GitHub possède une adresse URL centrale qui accepte toutes les requêtes 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 GitHub Pages est une collection simple de fichiers HTML , CSS et JS . GitHub dissortingbue ces fichiers sur différents serveurs à travers le monde. Ainsi, lorsque votre navigateur envoie une demande depuis l’Europe, il reçoit des données d’un serveur en Europe. La même chose est valable pour les demandes de l’Asie et des États-Unis.

Qu’est-ce que GitHub essaie de dire

Etant donné que les enregistrements A dans DNS doivent contenir des adresses IP et qu’ils doivent être 192.30.252.153 ou 192.30.252.154 , il est impossible de transférer les requêtes vers un serveur situé en Europe ou en Asie. Votre site Web hébergé sur GitHub Pages sera téléchargé depuis un serveur central GitHub Pages. Il existe un risque mineur que si les deux serveurs DNS GitHub Pages ( xxx153 et xxx154 ) sont désactivés pour une raison quelconque, tous les domaines personnalisés utilisant des adresses IP GitHub fixes ne seront pas accessibles (leurs requêtes DNS ne pourront pas être résolues).

C’est pourquoi GitHub suggère fortement d’utiliser un domaine de second niveau pour vos pages GitHub (par exemple, blog.example.com ) ou d’utiliser un fournisseur de services DNS prenant en charge un type d’enregistrement ALIAS faisant office d’enregistrement, mais transmettant une requête à 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 requête DNS pour your_github_username.github.io. est résolu en une adresse IP, par exemple 192.30.252.153 votre navigateur envoie une requête HTTP à ce serveur avec un Host tête HTTP. Vous trouverez ci-dessous des exemples de curl 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 Web utiliser.

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

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

Pourquoi ne puis-je pas append une entrée d’enregistrement CNAME qui accepte une requête de niveau supérieur ( @ ) à ma configuration DNS?

Citation de la documentation GitHub Pages:

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


Les références:

Configurer un domaine personnalisé avec GitHub Pages

Mon domaine personnalisé ne fonctionne pas

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