Search code examples
varnishvarnish-vcl

Multiple url purging Varnish issue


I have an issue with varnish purging :

Our application is very dynamic . So an event on Object A , will generate 10.000 Purges because Object A infos are present in all pages.

Object A is stats seller and Page are ads page .

We are managing this by an asynch http PURGE call to varnish from the php code using curl .

So we will have 10000 http call The urls cannot be calculated (so REgex is not an options )

I want to ask you guys , is there any possibility in varnish to do some Batch Purging (HTTP interface) ?

If not , what's the options that you test and works in a very dynamic application when model and events affect a lot your pages .

Thanks in advance Nabil


Solution

  • Running the purges through varnishadm would be your best bet. You could either tunnel commands through SSH (assuming you are dealing with a remote Varnish server) or allow remote access from your Web server to the Varnish server.

    You can easily write your own shell script to run a batch purge using varnishadm or you could take a look at Thinner, which is a Ruby based purger written to do exactly what you're looking for.

    The obvious alternative, which you have most likely considered already, is to re-write your App to include Object A in the URL or in a custom header (for example X-Object: A), so you could do the ban based on that header:

    sub vcl_recv {
      if (req.request == "BAN") {
        ban("obj.http.x-object == " +  req.http.x-object);
      }
    }