Description
Recently, I set up CloudFlare with Heroku to make good use of its Universal SSL and essentially made Dasherize https
the poor man's way.
My aim was to get the following working:
http://dasherize.com
redirects tohttps://www.dasherize.com
http://www.dasherize.com
redirects tohttps://www.dasherize.com
https://dasherize.com
redirects tohttps://www.dasherize.com
https://www.dasherize.com
works!
Here are the steps to get that working:
1) Sign up for a CloudFlare account
Go to https://www.cloudflare.com/.
2) Add a website to CloudFlare
3) Configure CNAME
After you have scanned your website, you will probably see an A
entry and a CNAME
entry.
Modify (and/or delete) the A
and CNAME
entries so that they become:
CNAME
,dasherize.com
to Heroku domain nameCNAME
,www
to Heroku domain name
It might look strange to have two CNAME
going to the same Heroku domain, but CloudFlare supports CNAME Flattening so we are good.
4) Wait for DNS to propagate
At this point, we can wait for DNS to propagate and when it's done:
http://dasherize.com
redirects tohttps://dasherize.com
http://www.dasherize.com
redirects tohttps://www.dasherize.com
And the DNS entries should look like so (with some information ommitted):
$ curl -I http://dasherize.com
HTTP/1.1 301 Moved Permanently
...
Location: https://dasherize.com/
Via: 1.1 vegur
Server: cloudflare-nginx
$ curl -I http://www.dasherize.com
HTTP/1.1 301 Moved Permanently
...
Location: https://www.dasherize.com/
Via: 1.1 vegur
Server: cloudflare-nginx
$ curl -I https://dasherize.com
HTTP/1.1 200 OK
Server: cloudflare-nginx
...
Via: 1.1 vegur
$ curl -I https://www.dasherize.com
HTTP/1.1 200 OK
Server: cloudflare-nginx
..
Via: 1.1 vegur
We are almost there, we are just left with redirecting http://dasherize.com
to https://www.dasherize.com
.
You might be thinking.. But why www
? Everyone has different opinions.
5) Final Redirection
To redirect http://dasherize.com
to https://www.dasherize.com
, we need to include add a Page Rule
that:
Forwards (301)
https://dasherize.com/*
tohttps://www.dasherize.com
And with that, the DNS entries will look like:
$ curl -I http://dasherize.com
HTTP/1.1 301 Moved Permanently
...
Location: https://dasherize.com/
Via: 1.1 vegur
Server: cloudflare-nginx
$ curl -I http://www.dasherize.com
HTTP/1.1 301 Moved Permanently
...
Location: https://www.dasherize.com/
Via: 1.1 vegur
Server: cloudflare-nginx
$ curl -I https://dasherize.com
HTTP/1.1 301 Moved Permanently
...
Server: cloudflare-nginx
Location: https://www.dasherize.com/
$ curl -I https://www.dasherize.com
HTTP/1.1 200 OK
...
Server: cloudflare-nginx
Via: 1.1 vegur
6) Full SSL
Finally, go to the Crypto
page, and make sure that you have selected the Full
option for your SSL. You can read more about the differences by clicking on Help
below the select options.
With these 6 steps, you now have a SSL enabled site for $0, all thanks to CloudFlare's Full SSL option:
Since all Heroku apps comes free with https
and that, quoting CloudFlare, "CloudFlare will not attempt to validate the certificate", hence it makes it easy for us to have the Dasherize site SSL-enabled.
Also, don't forget to set config.force_ssl = true
in your Rails production.rb
.
Thank you for reading.
About Jolly Good Code
We specialise in Agile practices and Ruby, and we love contributing to open source.
Speak to us about your next big idea, or check out our projects.