1. Reload edited Varnish configs
Varnish caching rules live in /etc/varnish folder. The config entry point (main file) is /etc/varnish/default.vcl. The daemon itself (ports, etc.) is configured by /etc/defaults/varnish.
Varnish is controlled by an utility program varnishadm.You can use it in a console mode or issue direct command evaluations (think shell, MySQL client). On Ubuntu / Debian default installation varnishadm command as is is enough to control Varnish. However, on custom setup, you might need to guide it to a special console port or point it to a secret file.
Varnish config load is 2 stage process:
- Parse and load cfg file to a Varnish memory and give it a handle you can later refer to it
- Activate config by handle (only possible if step 1 success)
Below is an one liner shell script which generates a random handle and uses it to load
the config if the config parses successfully.
HANDLE=varnish-cfg-$RANDOM ; \
varnishadm vcl.load $HANDLE /etc/varnish/default.vcl && \
varnishadm vcl.use $HANDLE
2. Purging Varnish cache from command line
Another useful snippet is to purge all Varnish cache from command line (invalidate all the cache):
varnishadm "ban.url ." # Matches all URLs
Note: Command is purge.url in Varnish 2.x.
The cache is kept as shared memorymapped file in /var/lib/varnish/$INSTANCE/varnish_storage.bin. When Varnish is running it should map 1 GB (default) of your virtual memory to this file (as seen in ps, top).
You could also ban by a hostname:
varnishadm "ban req.http.host == opensourcehacker.com"
Here is a shell transcript where we observe that ban works as intended using wget utility.
# Go to /tmp because wget leaves files around
cd /tmp
# 1st load: uncached file, one X-Varnish stamp
wget -S http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
--2013-02-06 20:02:18-- http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
Resolving opensourcehacker.com (opensourcehacker.com)... 188.40.123.220
Connecting to opensourcehacker.com (opensourcehacker.com)|188.40.123.220|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sun, 14 Aug 2011 22:55:01 GMT
ETag: "2000893-108ec-4aa7f09555b40"
Cache-Control: max-age=3600
Expires: Wed, 06 Feb 2013 23:02:19 GMT
Content-Type: image/jpeg
Content-Length: 67820
Accept-Ranges: bytes
Date: Wed, 06 Feb 2013 22:02:19 GMT
X-Varnish: 705602514
# 2st load: cached file, two X-Varnish stamps
wget -S http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
--2013-02-06 20:02:21-- http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
Resolving opensourcehacker.com (opensourcehacker.com)... 188.40.123.220
Connecting to opensourcehacker.com (opensourcehacker.com)|188.40.123.220|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sun, 14 Aug 2011 22:55:01 GMT
ETag: "2000893-108ec-4aa7f09555b40"
Cache-Control: max-age=3600
Expires: Wed, 06 Feb 2013 23:02:19 GMT
Content-Type: image/jpeg
Content-Length: 67820
Accept-Ranges: bytes
Date: Wed, 06 Feb 2013 22:02:22 GMT
X-Varnish: 705602515 705602514
# Purge
varnishadm "ban.url ."
# It's non-cached again
wget -S http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
--2013-02-06 20:02:34-- http://opensourcehacker.com/wp-content/uploads/2011/08/Untitled-41.jpg
Resolving opensourcehacker.com (opensourcehacker.com)... 188.40.123.220
Connecting to opensourcehacker.com (opensourcehacker.com)|188.40.123.220|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Sun, 14 Aug 2011 22:55:01 GMT
ETag: "2000893-108ec-4aa7f09555b40"
Cache-Control: max-age=3600
Expires: Wed, 06 Feb 2013 23:02:35 GMT
Content-Type: image/jpeg
Content-Length: 67820
Accept-Ranges: bytes
Date: Wed, 06 Feb 2013 22:02:35 GMT
X-Varnish: 705602516
3. Restart Varnish on Ubuntu
This forces config flush, not sure about whether cache file storage gets reset(?).
service varnish restart