Purge varnish cache for a single url using varnishadm
Varnish is being used in a Wordpress website.
I would like to purge Varnish for a single URL instead of a whole domain.
With this command I can restart Varnish for the whole domain:
varnishadm -T :6082 -S /etc/varnish/secret 'ban req.http.host ~ \"http://www.foo.com\" && req.url ~ \"^/\"'
However I would like to purge varnish only for a single url.
Ex: www.foo.com/url_to_be_purged
I've tried the previous command replacing it with the single URL:
varnishadm -T :6082 -S /etc/varnish/secret 'ban req.http.host ~ \"http://www.foo.com/url_to_be_purged\" && req.url ~ \"^/\"'
But it didn't work, the URL still was a HIT
in Varnish.
Any ideas of how can I achieve this?
UPDATE
As suggested ghloogh's answer, I've tried the following command:
varnishadm -T :6082 -S /etc/varnish/secret ban "req.http.host == http://www.foo.com && req.url == http://www.foo.com/url_to_be_purged"
I've also tried this variation:
varnishadm -T :6082 -S /etc/varnish/secret ban "req.http.host == http://www.foo.com && req.url == /url_to_be_purged"
But I still get a HIT
in the URL and the data is not updated
Solution 1:
You don't need to specify scheme for hostname and you may use strict match instead of regex:
varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret ban "req.http.host == example.com && req.url == /some/url/"
Solution 2:
You can try the following:
sudo varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 "ban req.url ~ \"http://example.com/testimage.png$\""
worked for me.