This blog post has been “promoted” to a help page, and is not being actively updated; see the help page for the most recent information.
CloudFlare is a security and acceleration service that sits between your application and the big, bad internet. Here’s how to get all that goodness for your PythonAnywhere web app.
Since CloudFlare works by taking over the DNS configuration for a site, this will only work for custom domains. I have used minimumviableserver.com, as an example.
The setup of a website on CloudFlare is pretty straightforward. If you give CloudFlare your domain, it automatically interrogates the DNS system for the domain’s current settings and provides excellent instructions about what needs to be changed. You will see something like this afterwards (unless you they changed their interface :)
Now, you just need to set up a simple CNAME record for your PythonAnywhere web app. Assuming you’ve already created a web app on PythonAnywhere like this:
From the web app config tab you’ll have a CNAME target for your PythonAnywhere web app – something like “webapp-120107.pythonanywhere.com”.
On the CloudFlare DNS config screen, create a CNAME for the “www” subdomain to point at this web app. That’s all you need to do to get your
www.yourdomain.com site working!
Either way, now when we go to
www.minimumviableserver.com, we see our web app, but how do we know it’s going through CloudFlare? looking at the network logs in our
browser’s developer tools, we can see that there are plenty of indicators in
the response headers.
Here are the response headers for a dynamically generated html page:
and these are the response headers for a static resource on that page:
If you’re a complete-ist and you want to get the naked domain working (that is,
yourdomain.com instead of
www.yourdomain.com), you need something a bit more complicated called a “page rule”. Check the cloudflare documentation, essentially you’ll want to point yourdomain.com/* to www.yourdomain.com/$1.