AWS Tip Of The Day - Invalidating Items in the CloudFront Cache
Posted on Sun 01 April 2018 in Posts
TIL today: in CloudFront, creating an invalidation for /*.html
is not the same
as creating an invalidation for /
even though /
redirects to /index.html
.
Context: yesterday I set up a CloudFront distribution for this site, so that I could attach an SSL cert to it (more
about this in a future blog post). However, shortly after setting it all up, going to
https://www.codependentcodr.com resulted in an unstyled version of the main page. Looking at Chrome Dev Tools, I saw
that the request for the CSS was still going to http://
and resulting in mixed content.
Looking into the source of index.html
(the main page of the site that you get directed to when going to /
), sure
enough the source URL for the CSS was in fact http://
instead of https://
. Reason being that I hadn't updated the
SITEURL
value in my Pelican publishconf.py
to be https://
. Easy change, so did that & redeployed the site to S3.
Still no CSS.
Thought maybe the file didn't get updated in S3, so I manually went into S3 and pulled down index.html
directly from
the bucket. Sure enough the source was correct -- https://
instead of http://
.
Problem was Cloudfront was still serving the old version of index.html
with the non-secure URL. Ok, easy enough,
with some help from a friend I was pointed at
the docs for invalidating items in Cloudfront's cache
. Easy enough, create an invalidation for /*.html
.
Did that, and waited. And waited. And waited. Other pages served fine (since they hadn't been requested before they
were getting the correct https://
url), but that stubborn main page was still unstyled. Went to bed & got up the next
day and still the same problem. Ok, something wrong.
Did some digging and found this discussion, which has this comment a little ways down the first page:
You need to invalidate what the browser is requesting -- not the file that is actually being served, if it is different. Your invalidation request should be simply for / instead of /index.html.
Duh. Added invalidation request for /
and the homepage started immediately serving the CSS correctly.