Skip to content

Instantly share code, notes, and snippets.

@vdbelt
Created August 21, 2018 11:43
Show Gist options
  • Save vdbelt/20f116236d2ebffa92f131e679c0551a to your computer and use it in GitHub Desktop.
Save vdbelt/20f116236d2ebffa92f131e679c0551a to your computer and use it in GitHub Desktop.
A CloudFlare service worker that proxies purge cache requests. Example: https://example.com/__purge_cache?zone=XX
addEventListener('fetch', event => {
event.respondWith(purgeCache(event.request))
})
async function purgeCache(request) {
const url = new URL(request.url)
// If the path doesn't begin with our protected prefix, just pass the request through.
if (!url.pathname.startsWith("/__purge_cache")) {
return fetch(request)
}
// Lets validate the zone id, and return an error if invalid
let zoneIdValidated = (new RegExp("^([a-z0-9]{32})$")).test(url.searchParams.get('zone'));
if (!zoneIdValidated) {
return new Response('Invalid Zone ID', {
status: 500
});
}
let content = '{"purge_everything":true}'
let headers = {
'Content-Type': 'application/json',
'X-Auth-Email': '', // Cloudflare API Auth Email
'X-Auth-Key': '' //Cloudflare API Auth Key
}
const init = {
method: 'POST',
headers: headers,
body: content
}
const response = await fetch('https://api.cloudflare.com/client/v4/zones/'+url.searchParams.get('zone')+'/purge_cache', init)
return response
}
@leandroprz
Copy link

Hi Martin. I can't get this to work properly.
When testing the worker from the Cloudflare dashboard I'm getting this result:

{
  "result": {
    "id": "xxxxxxxxxxxxxxxxxxxxxxxxx"
  },
  "success": true,
  "errors": [],
  "messages": []
}

But when using the link https://example.com/__purge_cache?zone=XX I'm getting a 404 error on my WordPress installation and nothing gets purged.

Any idea what could be happening?

@vdbelt
Copy link
Author

vdbelt commented May 13, 2022

Have you set up a worker route for /__purge_cache on your domain?

https://developers.cloudflare.com/workers/platform/routing/routes/

@leandroprz
Copy link

I have the default route Cloudflare creates when adding a new worker: https://my-worker.xxxxxxxxxx.workers.dev/

Going to the URL https://my-worker.xxxxxxxxxx.workers.dev/__purge_cache?zone=XX shows a JSON file. Is that okay or should I try adding a new subdomain for a different worker route?

@vdbelt
Copy link
Author

vdbelt commented May 13, 2022

Yes. A json file should be ok.

@avinashpudota
Copy link

Hi, is it possible to skip a folder from clearing cache. For example, i have images in a folder domain.com/images which doesn't change. I want to skip this folder and clear remaining cache files.

@leandroprz
Copy link

Cloudflare announced the deprecation of Wrangler v1 from Cloudflare Workers.
Is this script affected because of that?

@vdbelt
Copy link
Author

vdbelt commented Feb 9, 2023

No

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment