Status-Cacke – public report under own subdomain

StatusCake delivers accurate global website monitoring for tens of thousands of customers.

With the free plan you can use public reports to have a quick look on the health of your services.

If you want to display your public report under your own subdomain you can use a built in feature from statuscake and point the CNAME-Record of your subdomain to the report. In this case you can have problems with caching especially when you use cloudflare.

But there is no need to use this “dns-magic” you can easily proxy the report by your self und can put it under any uri you want.

There is a little pitfall because a public report uri looks like this “https://uptime.statuscake.com/?TestID=ZOasdEMaz3” and if you try to pass assets to this host you wont get the correct result. So you need two locations for an nginx definition.

location ~ /.+ {
  proxy_http_version 1.1;
  proxy_set_header Host uptime.statuscake.com;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

  proxy_pass https://uptime.statuscake.com;
}

location / {
  proxy_http_version 1.1;
  proxy_set_header Host uptime.statuscake.com;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

  proxy_pass https://uptime.statuscake.com/?TestID=ZOasdEMaz3;
}

If you use chef-solo recipes for you nginx configuration you can create a template like this:

<%

require 'uri'

uri          = URI(@public_report_uri)
proxy_host   = uri.host
proxy_scheme = uri.scheme

%>

server {

     [...]

     location ~ /.+ {
       proxy_http_version 1.1;
       proxy_set_header Host <%= proxy_host %>;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;

       proxy_pass <%= proxy_scheme %>://<%= proxy_host %>;
     }

     location / {
       proxy_http_version 1.1;
       proxy_set_header Host <%= proxy_host %>;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;

       proxy_pass <%= @public_report_uri %>;
     }
  }