php - cache - varnish purge curl




How to send a purge request in varnish (3)

I can't see a similar question, but apologies if I'm duping.

We're running a varnish cache on our system, but want to install a system where we can purge individual pages when they are edited (fairly normal). We've been trying to get it to work by using an HTTP header. So, our VCL is set up like:

acl purge {
      "localhost";
#### Our server IP #####
}

sub vcl_recv {
    if (req.request == "PURGE") {
            if (!client.ip ~ purge) {
                    error 405 "Not allowed.";
            }
            return (lookup);
    }
}

sub vcl_hit {
    if (req.request == "PURGE") {
            purge;
    }
 }

sub vcl_miss {
        if (req.request == "PURGE") {
                 purge;
        }
}

However, I'm stuck on how to actually SEND the http purge request. We're using PHP for the website, so I've tried using:

header("PL: PURGE / HTTP/1.0");
header("Host: url to purge");

But this doesn't seem to do anything (and varnishlog doesn't seem to show anything purging).

I've also experimented with cURL but, again, it doesn't seem to be working. Am I missing something really basic here, or is the basis sound, meaning my implementation is bugged?

Many thanks,


Maybe I'm on a newer version but what's above didn't work for me. This did:

sub vcl_hit {
  if (req.request == "PURGE") {
    ban("req.url ~ "+req.url);
    error 200 "Purged.";
  }
}

Quick, dirty and effective way to send a PURGE request:

curl -v -k -X PURGE URL

You can actually make a little script with that statement, as follows:

1) Open an editor, in example VI

 vi varnish_purge_url.sh

2) Enter the following text:

#!/bin/sh

curl -v -k -X PURGE $1

(remember to leave the blank line between the first and last lines).

3) Save the file and exit. Then set the appropriate attributes to execute it from the shell:

chmod 750 varnish_purge_url.sh

4) You want to be root when creating and using the above script. If using Ubuntu, feel free to add sudo in front of commands when required.

5) Usage is simple:

./varnish_purge_url.sh URL

Where URL is the URL to purge.


You need to go and make an HTTP request.

Untested, but should be along the lines of (if you want to use curl as you mentioned):

$curl = curl_init("http://your.varnish.cache/url-to-purge");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE");
curl_exec($curl);




varnish