I’m working on a little webapp (all client-side) I want to host it on Amazon S3. I’ve found several guides on this and have managed to create myself a bucket (with the same name as my domain), set it as a website and upload some content.
Where I’m struggling, and where all the documentation starts to get a bit vague, is how to properly configure my DNS.
All my registrar (123-reg) could suggest was web forwarding which gives me mydomain.com.s3.amazonaws.com
What do I have to configure, and where (ie. 123-reg / Amazon) can I get a clean URL?
Sounds like you’ve done most of the work already. For clarity I’ll go over those steps again just to make sure you’re set up properly:
Create an s3 bucket using your domain name as the bucket name (your bucket name should be
www.example.comif you want your site to beexample.comorwww.example.com)Upload your content to the s3 bucket. Choose a consistent name for your website index files (
index.htmlusually). You can also upload a custom page for 404 Not Found errors. Call this404.html. Give Read permissions to every file in your website so that the public can view it. Don’t give any extra permissions to the bucket, just the files within.Configure your bucket as a website. With the AWS console ( https://console.aws.amazon.com/s3/ ) you can select your bucket, click properties, then select the "Website" tab. Click enabled and set your index document to
index.htmland your error document to404.html. You will also need to set your bucket with access permissions to allow access via the web (http://docs.amazonwebservices.com/AmazonS3/latest/dev/WebsiteAccessPermissionsReqd.html)Take a note of the "Endpoint" URL in the website configuration tab. This is where your website lives. You can open the link in a new window and you should see your website just as it will look. Click around and make sure everything works as expected.
You MUST use the endpoint address in all steps below. The normal
www.example.com.s3.amazonaws.comwon’t work – you need to use the regional version (http://www.example.com.s3-website-us-east-1.amazonaws.com/)Now, we can set up the DNS to give you a clean, custom URL.
First, we will map
www.example.comto your site.Using your DNS provider’s tools, (123-reg in your case) you need to create a CNAME record to map
www.example.comtowww.example.com.s3-website-us-east-1.amazonaws.comThe CNAME is the only thing you need if you just want
www.example.com. Most people also wantexample.comto work so we need another step.example.comis often referred to as a naked domain or the apex record of the domain. The reason it’s a problem is that it can’t be a CNAME. CNAMEs only work on subdomains like "www." This makes it more difficult to point at s3.The usual approach is to use a service to automatically redirect any request going to
example.comto point towww.example.com. This will then pick up your CNAME record and your site will be served from s3.The automatic redirect is not possible with plain old DNS so you have to use another service. Some DNS providers offer this service along with their DNS (GoDaddy does, amazon route53 does not. Not sure about 123-reg)
If your DNS provider doesn’t do it, there are a few free services. One that I’ve used is http://wwwizer.com/naked-domain-redirect – it doesn’t require any registration or payment.
To use this type of service, you need to create a DNS "A" record for your naked domain. For the
wwwizer.comservice, you would need to create an A record to pointexample.comto174.129.25.170. That’s all!So, with this setup, if a user types
example.cominto their browser, the following would happen:example.com->174.129.25.170(wwwizer.com’s service)174.129.25.170forexample.com174.129.25.170redirectsexample.com->www.example.comwww.example.com-> CNAME towww.example.com.s3-website-us-east-1.amazonaws.comwww.example.com.s3-website-us-east-1.amazonaws.com-> points to Amazon S3www.example.comis now served by Amazon S3Enjoy!