To www or not to www ? well, that's not the real question. Apparently, nowadays this topic has changed a little bit from the early times of the World Wide Web. In this article, there are some interesting pieces of information for those interested in that topic.
The bottom line is whatever your choice is, there has to be consistency, in this example, the canonical name will be www.abelperez.info, but I also want that if anyone browses just abelperez.info, they have to be redirected to the www version. How do we do that on AWS ?
Creating the redirect bucket
As discussed earlier, an S3 bucket can be configured as a website, but it will only listen on a single hostname (www.abelperez.info), therefore if we want to listen on another hostname (abelperez.info), we need another S3 bucket, again matching the bucket name with the hostname.
On AWS S3 console, create a new bucket named (your domain name without www). This time, instead of selecting Use this bucket to host a website, let's select Redirect requests where:
- Target bucket or domain: is the www hosthame
- Protocol: will be http for now
The configuration should look like this
Creating the Record set
Now, we need to route DNS requests to the new website previously created. To do that, let's go to Route 53 console, select your hosted zone, then click on Create Record Set button. Specify the following values:
- Name: leave in blank - it will be non www DNS entry
- Type: A
- Alias: Yes
- Alias Target: You should see the bucket name in the list
What have we done so far ?
We have created two DNS entries pointing to two different S3 buckets (effectively two web servers). One web server (www) will serve the content as explained earlier. The other web server (non www) will issue 301 redirect code to the www version. This way, the browser will request again, but now with the www version which will get served by the www web server, delivering the content as expected.
The following diagram illustrates the workflow
+----------------+ GET abelperez.info | S3 Bucket | +------------------------------> | abelperez.info +----+ | | | | +-----+-----+ +----------------+ | | | | +-> | Route 53 | | | | | | | +-----+-----+ +--------------------+ | | | | S3 Bucket | | | +--------------------------> | www.abelperez.info | | | GET www.abelperez.info | | | | +----------+---------+ | +-----+-----+ | | | | <-----------------------------------------+ | | Browser | HTTP 200 - OK | | | <--------------------------------------------------------+ +-----------+ HTTP 301 - Permanent Redirect to www
Let's test it
To test this behaviour, one easy way is using the universal tool CURL, we'll use two switches:
- -L Follows the redirects
- -I Fetches headers only
For more information about CURL, see the manpage.
There are two scenarios to test: first, when we try to hit non www host. We can see the first request gets HTTP 301 code and the second gets HTTP 200.
abel@ABEL-DESKTOP:~$ curl -L -I http://abelperez.info HTTP/1.1 301 Moved Permanently x-amz-id-2: pLVO9p67k51FJpZCSbF2LxJyrB8w9WyEkgNXHF0Zq8twe3Dw1ud3OiIHRzN0y5B4wDvwngLGEBg= x-amz-request-id: AD13DD8436422AAC Date: Sat, 27 Jan 2018 17:50:19 GMT Location: http://www.abelperez.info/ Content-Length: 0 Server: AmazonS3 HTTP/1.1 200 OK x-amz-id-2: s/6E2lV7nYtfBq96Qftwip7lzMvIkOMuIq0jbwCisYU0V7ujMRisPuqPsNt2vMuBWFIYuwkqLFs= x-amz-request-id: 1C258F07FD183836 Date: Sat, 27 Jan 2018 17:50:19 GMT Last-Modified: Wed, 08 Nov 2017 09:10:40 GMT ETag: "a339a5d4a0ad6bb215a1cef5221b0f6a" Content-Type: text/html Content-Length: 85 Server: AmazonS3
The second scenario is trying to go directly to www host, and the request gets HTTP 200 straight away.
abel@ABEL-DESKTOP:~$ curl -L -I http://www.abelperez.info HTTP/1.1 200 OK x-amz-id-2: apCkPouaYzoy5gjemxU+BjDLbQxxE46EUhDXBHirq6PK0OZbubP2BVhWllxlSV99zg5UB3tGbd8= x-amz-request-id: D928A1DF3B3EB0DE Date: Sat, 27 Jan 2018 18:18:19 GMT Last-Modified: Wed, 08 Nov 2017 09:10:40 GMT ETag: "a339a5d4a0ad6bb215a1cef5221b0f6a" Content-Type: text/html Content-Length: 85 Server: AmazonS3
No comments:
Post a Comment