Debugging Varnish VCL configuration files
If you're a Drupal or PHP developer used to debugging or troubleshooting some code by adding a print $variable;
or dpm($object);
to your PHP, and then refreshing the page to see the debug message (or using XDebug, or using watchdog logging...), debugging Varnish's VCL language can be intimidating.
VCL uses C-like syntax, and is compiled when varnish starts, so you can't just modify a .vcl file and refresh to see changes or debug something. And there are only a few places where you can simply stick a debug statement. So, I'll explain four different ways I use to debug VCLs in this post (note: don't do this on a production server!):
Simple Error statements (like print
in PHP)
Sometimes, all you need to do is see the output of a variable, like req.http.Cookie
, inside vcl_recv()
. In these cases, you can just add an error
statement to throw an error in Varnish and output the contents of a string, like the Cookie: