diff options
Diffstat (limited to 'content/blog/2020-08-22-redirect-github-pages.md')
-rw-r--r-- | content/blog/2020-08-22-redirect-github-pages.md | 119 |
1 files changed, 53 insertions, 66 deletions
diff --git a/content/blog/2020-08-22-redirect-github-pages.md b/content/blog/2020-08-22-redirect-github-pages.md index f92ae07..1a54b2a 100644 --- a/content/blog/2020-08-22-redirect-github-pages.md +++ b/content/blog/2020-08-22-redirect-github-pages.md @@ -9,18 +9,17 @@ draft = false ## Step 1 -Add a new file CNAME to your GitHub Pages repository containing only one -line: your top-level domain name. E.g.: `example.com` +Add a new file CNAME to your GitHub Pages repository containing only one line: +your top-level domain name. E.g.: `example.com` ## Step 2 -\[Optional\] but highly recommended +[Optional] but highly recommended -2.1: Remove all other top-level records (prefixed with @) of type A from -your DNS configuration. +2.1: Remove all other top-level records (prefixed with @) of type A from your +DNS configuration. -2.2: Remove a CNAME record for the second-level domain www if it is -present. +2.2: Remove a CNAME record for the second-level domain www if it is present. ## Step 3 @@ -34,70 +33,61 @@ Add these 5 entries to the very top of your DNS configuration: www CNAME your_github_username.github.io. ``` -Replace `your_github_username` with your actual GitHub -username. +Replace `your_github_username` with your actual GitHub username. ## Step 4 -Wait for your DNS changes to propagate. DNS changes aren\'t effective +Wait for your DNS changes to propagate. DNS changes aren't effective immediately. They can take up to a full day to propagate. # Long answer -This issue has two sides. One is the DNS configuration itself. Another -one is the way GitHub Pages will forward HTTP requests. +This issue has two sides. One is the DNS configuration itself. Another one is +the way GitHub Pages will forward HTTP requests. -We need to know a few things to understand what GitHub is trying to say -in their documentation. +We need to know a few things to understand what GitHub is trying to say in their +documentation. ## DNS Entry Types There are two types of DNS records which interest us: CNAME and A. -`A` is also known as `Apex` or sometimes as -`root entry`. It forwards requests to a specified fixed IP -address. `CNAME` entry forwards requests to a specified URL -(actual valid plain text URL, not an IP address). +`A` is also known as `Apex` or sometimes as `root entry`. It forwards requests +to a specified fixed IP address. `CNAME` entry forwards requests to a specified +URL (actual valid plain text URL, not an IP address). ## DNS Load balancing -GitHub has one central URL address which accepts all DNS requests for -GitHub Pages: `http://username.github.io`. That URL is -resolved to different IP addresses based on your geographical location. -Website hosted on GitHub Pages is a simple collection of -`HTML`, `CSS` and `JS` files. GitHub -distributes these files to different servers across the globe. So that -when your browser sends a request from Europe, it receives data from a -server in Europe. The same is valid for the requests from Asia and the -USA. +GitHub has one central URL address which accepts all DNS requests for GitHub +Pages: `http://username.github.io`. That URL is resolved to different IP +addresses based on your geographical location. Website hosted on GitHub Pages is +a simple collection of `HTML`, `CSS` and `JS` files. GitHub distributes these +files to different servers across the globe. So that when your browser sends a +request from Europe, it receives data from a server in Europe. The same is valid +for the requests from Asia and the USA. ## What GitHub is trying to say -Since `A` records in DNS must contain IP addresses, and they -must be either `185.199.108.153` or -`185.199.109.153` or `185.199.110.153` or -`185.199.111.153`, there is no way to forward requests to a -server located somewhere in Europe or Asia. Your website hosted at -GitHub Pages will be downloaded from a central GitHub Pages server. -There is a minor risk that if GitHub Pages DNS servers -(`x.x.x.153`) are down for some reason, all custom domains -which use fixed GitHub Pages IP addresses will not be accessible (their +Since `A` records in DNS must contain IP addresses, and they must be either +`185.199.108.153` or `185.199.109.153` or `185.199.110.153` or +`185.199.111.153`, there is no way to forward requests to a server located +somewhere in Europe or Asia. Your website hosted at GitHub Pages will be +downloaded from a central GitHub Pages server. There is a minor risk that if +GitHub Pages DNS servers (`x.x.x.153`) are down for some reason, all custom +domains which use fixed GitHub Pages IP addresses will not be accessible (their DNS requests will not be resolvable). -That is why GitHub strongly suggests to either use a second-level domain -for your GitHub Pages (e.g. `blog.example.com`) or use a DNS -service provider that supports a record type `ALIAS` that -acts as `A` record but forwards request to a URL address -(e.g. `username.github.io`) instead of a fixed IP address. +That is why GitHub strongly suggests to either use a second-level domain for +your GitHub Pages (e.g. `blog.example.com`) or use a DNS service provider that +supports a record type `ALIAS` that acts as `A` record but forwards request to a +URL address (e.g. `username.github.io`) instead of a fixed IP address. ## How GitHub Pages treats HTTP requests -After a DNS request for `your_github_username.github.io` is -resolved into an IP address, e.g. `185.199.108.153` your -browser sends an HTTP request to that server with an HTTP header -`Host`. Below are `curl` examples that load the -same website (these examples might not work if you are behind a proxy -server): +After a DNS request for `your_github_username.github.io` is resolved into an IP +address, e.g. `185.199.108.153` your browser sends an HTTP request to that +server with an HTTP header `Host`. Below are `curl` examples that load the same +website (these examples might not work if you are behind a proxy server): ```sh curl --header "Host: your_github_username.github.io" http://185.199.108.153/ @@ -107,31 +97,28 @@ curl --header "Host: example.com" http://185.199.108.153/ This way GitHub Pages servers know which user website to serve. -> GitHub Pages server will automatically redirect HTTP requests to the -> top-level domain if your `CNAME` file contains -> `example.com` but `www.example.com` is +> GitHub Pages server will automatically redirect HTTP requests to the top-level +> domain if your `CNAME` file contains `example.com` but `www.example.com` is > requested. > -> The same is valid if your `CNAME` file contains -> `www.example.com` but the header `Host` in the -> `HTTP` request contains `example.com`. +> The same is valid if your `CNAME` file contains `www.example.com` but the +> header `Host` in the `HTTP` request contains `example.com`. -## Why can\'t I add a `CNAME` record entry that accepts a top-level request (`@`) to my DNS configuration? +## Why can't I add a `CNAME` record entry that accepts a top-level request (`@`) to my DNS configuration? Quote from the GitHub Pages documentation: -> Warning: Do not create a CNAME record for your custom apex domain! -> Doing so may cause issues with other services, such as email, on that -> domain. +> Warning: Do not create a CNAME record for your custom apex domain! Doing so +> may cause issues with other services, such as email, on that domain. ## References: -1. [Setting up a custom domain with GitHub - Pages](https://docs.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site) -2. [My custom domain isn\'t - working](https://docs.github.com/en/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages) -3. [Cannot access my GitHub Pages website by IP - Address](https://serverfault.com/questions/589370/cannot-access-my-github-pages-website-by-ip-address) -4. [How do I set up GitHub Pages to redirect DNS requests from a - subdomain (e.g. www) to the top-level domain (TLD, Apex - record)?](https://stackoverflow.com/questions/23375422/how-do-i-set-up-github-pages-to-redirect-dns-requests-from-a-subdomain-e-g-www) +1. [Setting up a custom domain with GitHub + Pages](https://docs.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site) +2. [My custom domain isn't + working](https://docs.github.com/en/github/working-with-github-pages/troubleshooting-custom-domains-and-github-pages) +3. [Cannot access my GitHub Pages website by IP + Address](https://serverfault.com/questions/589370/cannot-access-my-github-pages-website-by-ip-address) +4. [How do I set up GitHub Pages to redirect DNS requests from a subdomain (e.g. + www) to the top-level domain (TLD, Apex + record)?](https://stackoverflow.com/questions/23375422/how-do-i-set-up-github-pages-to-redirect-dns-requests-from-a-subdomain-e-g-www) |