<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>The Varnish Reference Manual on Varnish Cache</title><link>https://www.varnish.org/docs/reference/</link><description>Recent content in The Varnish Reference Manual on Varnish Cache</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 16 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.varnish.org/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Shell Tricks</title><link>https://www.varnish.org/docs/reference/shell_tricks/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/shell_tricks/</guid><description>&lt;!-- Copyright (c) 2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-shell-tricks"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All the varnish programs can be invoked with the single
argument &lt;code&gt;--optstring&lt;/code&gt; to request their getopt()
specification, which simplifies wrapper scripts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;optstring=$(varnishfoo --optstring)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;while getopts &amp;#34;$optstring&amp;#34; opt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;do
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; case $opt in
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; # handle $OPTARG
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; # handle other options
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; *)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; # ignore unneeded options
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; esac
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;done
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;varnishfoo &amp;#34;$@&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;# do something with the options
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Varnish Command Line Interface</title><link>https://www.varnish.org/docs/reference/varnish-cli/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnish-cli/</guid><description>&lt;h2 id="description"&gt;Description&lt;/h2&gt;
&lt;p&gt;Varnish has a command line interface (CLI) which can control and change
most of the operational parameters and the configuration of Varnish,
without interrupting the running service.&lt;/p&gt;
&lt;p&gt;The CLI can be used for the following tasks:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can upload, change and delete VCL files from the CLI.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can inspect and change the various parameters Varnish has available through the CLI. The individual parameters are documented in the &lt;a href="https://www.varnish.org/docs/reference/varnishd/"&gt;&lt;code&gt;varnishd&lt;/code&gt; reference documentation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Varnish Processing States</title><link>https://www.varnish.org/docs/reference/states/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/states/</guid><description>&lt;!-- Copyright (c) 2014-2015 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="reference-states"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Varnish processing of client and backend requests is implemented as
state machines. Whenever a state is entered, a C function is called,
which in turn calls the appropriate Varnish core code functions to
process the request or response at this stage. For most states, core
code also calls into a state-specific function compiled from VCL, a
VCL subroutine (see &lt;a href="https://www.varnish.org/docs/reference/vcl-step/#id6"&gt;VCL Steps&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>varnish-counters</title><link>https://www.varnish.org/docs/reference/varnish-counters/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnish-counters/</guid><description>&lt;!-- Copyright (c) 2015 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnish-counters-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-counter-field-definitions"&gt;Varnish counter field definitions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- Copyright (c) 2017-2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- This is *NOT* a RST file but the syntax has been chosen so
that it may become an RST file at some later date. --&gt;
&lt;!-- varnish_vsc_begin:: lck --&gt;
&lt;h3 id="lck--lock-counters"&gt;LCK – Lock Counters&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Counters which track the activity in the different classes
of mutex-locks.&lt;/p&gt;</description></item><item><title>varnishadm</title><link>https://www.varnish.org/docs/reference/varnishadm/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishadm/</guid><description>&lt;!-- Copyright (c) 2010-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishadm-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="control-a-running-varnish-instance"&gt;Control a running Varnish instance&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishadm [-h] [-n workdir] [-p] [-S secretfile] [-T [address]:port] [-t timeout] [command […]]&lt;/p&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishadm utility establishes a CLI connection to varnishd either
using -n &lt;em&gt;workdir&lt;/em&gt; or using the -T and -S arguments. If -n &lt;em&gt;workdir&lt;/em&gt; is
given, the location of the secret file and the address:port are looked
up in shared memory. If neither is given, varnishadm uses the -n
defaults documented for &lt;a href="https://www.varnish.org/docs/reference/varnishd/#varnishd-1"&gt;varnishd&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>varnishd</title><link>https://www.varnish.org/docs/reference/varnishd/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishd/</guid><description>&lt;!-- Copyright (c) 2010-2020 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishd-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="http-accelerator-daemon"&gt;HTTP accelerator daemon&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;varnishd
[-a [name=][listen_address[,PROTO|,option=value,…]]
 [-A cfgfile]
 [-b [host[:port]|path]]
 [-C]
 [-d]
 [-E extension]
 [-F]
 [-f config]
 [-h type[,options]]
 [-I clifile]
 [-i identity]
 [-j jail[,jailoptions]]
 [-l vsl]
 [-M address:port]
 [-n workdir]
 [-P file]
 [-p param=value]
 [-r param[,param…]]
 [-S secret-file]
 [-s [name=]kind[,options]]
 [-T address[:port]]
 [-t TTL]
 [-V]
 [-W waiter]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;varnishd [-x parameter|vsl|cli|builtin|optstring]
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;varnishd [-?]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishd daemon accepts HTTP requests from clients, passes them on
to a backend server and caches the returned documents to better
satisfy future requests for the same document.&lt;/p&gt;</description></item><item><title>varnishhist</title><link>https://www.varnish.org/docs/reference/varnishhist/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishhist/</guid><description>&lt;!-- Copyright (c) 2010-2016 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishhist-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-request-histogram"&gt;Varnish request histogram&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishhist [-B &lt;factor&gt;] [-C] [-d] [-g &amp;lt;request|vxid&amp;gt;] [-h] [-L &lt;limit&gt;] [-n &lt;workdir&gt;] [-p &lt;period&gt;] [-P responsetime] [-P reqbodytime] [-P size] [-P Bereqtime] [-P Beresptime] [-P BerespBodytime] [-P Besize] [-P &amp;lt;[cbE:]tag:[prefix]:field_num[:min:max]&amp;gt;] [-Q &lt;file&gt;] [-q &lt;query&gt;] [-r &lt;filename&gt;] [-t &amp;lt;seconds|off&amp;gt;] [-T &lt;seconds&gt;] [-V]&lt;/p&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishhist utility reads varnishd(1) shared memory logs and
presents a continuously updated histogram showing the distribution
of the last N requests by their processing. The value of N and the
vertical scale are displayed in the top left corner. The horizontal
scale is logarithmic. Hits are marked with a pipe character (“|”),
and misses are marked with a hash character (“#”).&lt;/p&gt;</description></item><item><title>varnishlog</title><link>https://www.varnish.org/docs/reference/varnishlog/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishlog/</guid><description>&lt;!-- Copyright (c) 2010-2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishlog-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="display-varnish-logs"&gt;Display Varnish logs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishlog [-a] [-A] [-b] [-c] [-C] [-d] [-D] [-E] [-g &amp;lt;session|request|vxid|raw&amp;gt;] [-h] [-i &lt;taglist&gt;] [-I &amp;lt;[taglist:]regex&amp;gt;] [-k &lt;num&gt;] [-L &lt;limit&gt;] [-n &lt;workdir&gt;] [-P &lt;file&gt;] [-Q &lt;file&gt;] [-q &lt;query&gt;] [-r &lt;filename&gt;] [-R &amp;lt;limit[/duration]&amp;gt;] [-t &amp;lt;seconds|off&amp;gt;] [-T &lt;seconds&gt;] [-u] [-v] [-V] [-w &lt;filename&gt;] [-x &lt;taglist&gt;] [-X &amp;lt;[taglist:]regex&amp;gt;]&lt;/p&gt;</description></item><item><title>varnishncsa</title><link>https://www.varnish.org/docs/reference/varnishncsa/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishncsa/</guid><description>&lt;!-- Copyright (c) 2010-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishncsa-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="display-varnish-logs-in-apache--ncsa-combined-log-format"&gt;Display Varnish logs in Apache / NCSA combined log format&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishncsa [-a] [-b] [-c] [-C] [-d] [-D] [-E] [-F &lt;format&gt;] [-f &lt;formatfile&gt;] [-g &amp;lt;request|vxid&amp;gt;] [-h] [-j] [-k &lt;num&gt;] [-L &lt;limit&gt;] [-n &lt;workdir&gt;] [-P &lt;file&gt;] [-Q &lt;file&gt;] [-q &lt;query&gt;] [-r &lt;filename&gt;] [-R &amp;lt;limit[/duration]&amp;gt;] [-t &amp;lt;seconds|off&amp;gt;] [-V] [-w &lt;filename&gt;]&lt;/p&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishncsa utility reads varnishd(1) shared memory logs and
presents them in the Apache / NCSA “combined” log format.&lt;/p&gt;</description></item><item><title>varnishstat</title><link>https://www.varnish.org/docs/reference/varnishstat/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishstat/</guid><description>&lt;h2 id="varnish-cache-statistics"&gt;Varnish Cache statistics&lt;/h2&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;varnishstat [-1] [-c] [-f &amp;lt;glob&amp;gt;] [-h] [-I &amp;lt;glob&amp;gt;] [-j] [-l] [-n &amp;lt;workdir&amp;gt;] [-r] [-t &amp;lt;seconds|off&amp;gt;] [-V] [-X &amp;lt;glob&amp;gt;] [-x]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishstat utility displays statistics from a running varnishd(1) instance.&lt;/p&gt;
&lt;p&gt;The following options are available:&lt;/p&gt;
&lt;h3 id="curses-mode"&gt;CURSES MODE&lt;/h3&gt;
&lt;p&gt;When neither &lt;code&gt;-1&lt;/code&gt;, &lt;code&gt;-j&lt;/code&gt; nor &lt;code&gt;-x&lt;/code&gt; options are given, the application starts up
in curses mode. This shows a continuously updated view of the counter
values, along with their description.&lt;/p&gt;</description></item><item><title>varnishtest</title><link>https://www.varnish.org/docs/reference/varnishtest/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishtest/</guid><description>&lt;!-- Copyright (c) 2010-2020 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishtest-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="test-program-for-varnish"&gt;Test program for Varnish&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishtest [-hikLlqv] [-b size] [-D name=val] [-j jobs] [-n iter] [-t duration] file [file …]&lt;/p&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishtest program is a script driven program used to test the
Varnish Cache.&lt;/p&gt;
&lt;p&gt;The varnishtest program, when started and given one or more script
files, can create a number of threads representing backends, some
threads representing clients, and a varnishd process. This is then used to
simulate a transaction to provoke a specific behavior.&lt;/p&gt;</description></item><item><title>varnishtop</title><link>https://www.varnish.org/docs/reference/varnishtop/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/varnishtop/</guid><description>&lt;!-- Copyright (c) 2010-2015 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="varnishtop-1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-log-entry-ranking"&gt;Varnish log entry ranking&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="synopsis"&gt;SYNOPSIS&lt;/h3&gt;
&lt;p&gt;varnishtop [-1] [-b] [-c] [-C] [-d] [-E] [-f] [-g &amp;lt;session|request|vxid|raw&amp;gt;] [-h] [-i &lt;taglist&gt;] [-I &amp;lt;[taglist:]regex&amp;gt;] [-L &lt;limit&gt;] [-n &lt;workdir&gt;] [-p &lt;period&gt;] [-Q &lt;file&gt;] [-q &lt;query&gt;] [-r &lt;filename&gt;] [-t &amp;lt;seconds|off&amp;gt;] [-T &lt;seconds&gt;] [-x &lt;taglist&gt;] [-X &amp;lt;[taglist:]regex&amp;gt;] [-V]&lt;/p&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The varnishtop utility reads &lt;a href="https://www.varnish.org/docs/reference/varnishd/#varnishd-1"&gt;varnishd&lt;/a&gt; shared memory logs and
presents a continuously updated list of the most commonly occurring
log entries. With suitable filtering using the &lt;code&gt;-I&lt;/code&gt;, &lt;code&gt;-i&lt;/code&gt;, &lt;code&gt;-X&lt;/code&gt;
and &lt;code&gt;-x&lt;/code&gt; options, it can be used to display a ranking of requested
documents, clients, user agents, or any other information which is
recorded in the log.&lt;/p&gt;</description></item><item><title>VCL</title><link>https://www.varnish.org/docs/reference/vcl/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vcl/</guid><description>&lt;!-- Copyright (c) 2010-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vcl-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-configuration-language"&gt;Varnish Configuration Language&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;The VCL language is a small domain-specific language designed to be
used to describe request handling and document caching policies for
Varnish Cache.&lt;/p&gt;
&lt;p&gt;When a new configuration is loaded, the varnishd management process
translates the VCL code to C and compiles it to a shared object which
is then loaded into the server process.&lt;/p&gt;</description></item><item><title>VCL-backends</title><link>https://www.varnish.org/docs/reference/vcl-backend/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vcl-backend/</guid><description>&lt;!-- Copyright (c) 2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vcl-backend-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="configuring-backends"&gt;Configuring Backends&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id="backend-definition"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="backend-definition"&gt;Backend definition&lt;/h3&gt;
&lt;p&gt;A backend declaration creates and initialises a named backend object.
A declaration start with the keyword &lt;code&gt;backend&lt;/code&gt; followed by the name of the
backend. The actual declaration is in curly brackets, in a key/value fashion.:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;backend name {
 .attribute1 = value;
 .attribute2 = value;
 [...]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If there is a backend named &lt;code&gt;default&lt;/code&gt; it will be used unless another
backend is explicitly set. If no backend is named &lt;code&gt;default&lt;/code&gt; the first
backend in the VCL program becomes the default.&lt;/p&gt;</description></item><item><title>VCL-probe</title><link>https://www.varnish.org/docs/reference/vcl-probe/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vcl-probe/</guid><description>&lt;!-- Copyright (c) 2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vcl-probe-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="configuring-backend-health-probes"&gt;Configuring Backend Health Probes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a id="reference-vcl-probes"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="backend-health-probes"&gt;Backend health probes&lt;/h3&gt;
&lt;p&gt;Varnish can be configured to periodically send a request to test if a
backend is answering and thus “healthy”.&lt;/p&gt;
&lt;p&gt;Probes can be configured per backend:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;backend foo {
 [...]
 .probe = {
 [...]
 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;They can be named and shared between backends:&lt;/p&gt;</description></item><item><title>VCL-steps</title><link>https://www.varnish.org/docs/reference/vcl-step/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vcl-step/</guid><description>&lt;!-- Copyright (c) 2013-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vcl-step-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="built-in-subroutines"&gt;Built-in subroutines&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;Various built-in subroutines are called during processing of client
and backend requests as well as upon &lt;code&gt;vcl.load&lt;/code&gt; and &lt;code&gt;vcl.discard&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;See &lt;a href="https://www.varnish.org/docs/reference/states/#reference-states"&gt;Varnish Processing States&lt;/a&gt; for a detailed graphical overview of the
states and how they relate to core code functions and VCL subroutines.&lt;/p&gt;
&lt;p&gt;Built-in subroutines always terminate with a &lt;code&gt;return (&amp;lt;action&amp;gt;)&lt;/code&gt;,
where &lt;code&gt;&amp;lt;action&amp;gt;&lt;/code&gt; determines how processing continues in the request
processing state machine.&lt;/p&gt;</description></item><item><title>VCL-Variables</title><link>https://www.varnish.org/docs/reference/vcl-var/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vcl-var/</guid><description>&lt;!-- Copyright (c) 2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vcl-var-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="the-complete-album"&gt;The complete album&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="description"&gt;DESCRIPTION&lt;/h3&gt;
&lt;p&gt;This is a list of all variables in the VCL language.&lt;/p&gt;
&lt;p&gt;Variable names take the form &lt;code&gt;scope.variable[.index]&lt;/code&gt;, for instance:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;req.url
beresp.http.date
client.ip
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Which operations are possible on each variable is described below,
often with the shorthand “backend” which covers the &lt;code&gt;vcl_backend_* {}&lt;/code&gt;
subroutines and “client” which covers the rest, except &lt;code&gt;vcl_init {}&lt;/code&gt;
and &lt;code&gt;vcl_fini {}&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>VCLI protocol - Scripting the CLI interface</title><link>https://www.varnish.org/docs/reference/cli_protocol/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/cli_protocol/</guid><description>&lt;!-- Copyright (c) 2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-cli-api"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Varnish CLI has a few bells&amp;amp;whistles when used as an API.&lt;/p&gt;
&lt;p&gt;First: vcli.h contains magic numbers.&lt;/p&gt;
&lt;p&gt;Second: If you use varnishadm to connect to varnishd for
API purposes, use the -p argument to get “pass” mode.&lt;/p&gt;
&lt;p&gt;In “pass” mode, or with direct CLI connections (more below), the
first line of responses is always exactly 13 bytes long, including
the NL, and it contains two numbers: The status code and the count
of bytes in the “body” of the response:&lt;/p&gt;</description></item><item><title>VEXT - Varnish Extensions</title><link>https://www.varnish.org/docs/reference/vext/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vext/</guid><description>&lt;!-- Copyright (c) 2010-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-vext"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A Varnish Extension is a shared library, loaded into the worker
process during startup, before privileges are dropped for good. This
allows a VEXT to do pretty much anything it wants to do in the
worker process.&lt;/p&gt;
&lt;p&gt;A VEXT can (also) contain a VMOD, and it will work just like any
other VMOD, which also means that VMODs can be loaded as VEXTs.&lt;/p&gt;</description></item><item><title>VMOD - Varnish Modules</title><link>https://www.varnish.org/docs/reference/vmod/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod/</guid><description>&lt;!-- Copyright (c) 2010-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-vmod"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For all you can do in VCL, there are things you cannot do.
Look an IP number up in a database file for instance.
VCL provides for inline C code, and there you can do everything,
but it is not a convenient or even readable way to solve such
problems.&lt;/p&gt;
&lt;p&gt;This is where VMODs come into the picture: A VMOD is a shared
library with some C functions which can be called from VCL code.&lt;/p&gt;</description></item><item><title>VMOD blob - Utilities for the VCL blob type, encoding and decoding</title><link>https://www.varnish.org/docs/reference/vmod_blob/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_blob/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_blob.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-blob-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import blob [as name] [from &amp;#34;path&amp;#34;]

[BLOB decode(ENUM decoding, INT length, STRING encoded)](#blob-decode)

[STRING encode(ENUM encoding, ENUM case, BLOB blob)](#blob-encode)

[STRING transcode(ENUM decoding, ENUM encoding, ENUM case, INT length, STRING encoded)](#blob-transcode)

[BOOL same(BLOB, BLOB)](#blob-same)

[BOOL equal(BLOB, BLOB)](#blob-equal)

[INT length(BLOB)](#blob-length)

[BLOB sub(BLOB, BYTES length, BYTES offset=0)](#blob-sub)

[new xblob = blob.blob(ENUM decoding, STRING encoded)](#blob-blob)

 [BLOB xblob.get()](#xblob-get)

 [STRING xblob.encode(ENUM encoding, ENUM case)](#xblob-encode)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;This VMOD provides utility functions and an object for the VCL data
type &lt;code&gt;BLOB&lt;/code&gt;, which may contain arbitrary data of any length.&lt;/p&gt;</description></item><item><title>VMOD cookie - Varnish Cookie Module</title><link>https://www.varnish.org/docs/reference/vmod_cookie/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_cookie/</guid><description>&lt;!-- Copyright (c) 2020 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_cookie.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-cookie-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import cookie [as name] [from &amp;#34;path&amp;#34;]

[VOID clean()](#cookie-clean)

[VOID delete(STRING cookiename)](#cookie-delete)

[VOID filter(STRING filterstring)](#cookie-filter)

[VOID filter_re(REGEX expression)](#cookie-filter-re)

[VOID keep(STRING filterstring)](#cookie-keep)

[VOID keep_re(REGEX expression)](#cookie-keep-re)

[STRING format_date(TIME now, DURATION timedelta)](#cookie-format-date)

[STRING get(STRING cookiename)](#cookie-get)

[STRING get_re(REGEX expression)](#cookie-get-re)

[STRING get_string()](#cookie-get-string)

[BOOL isset(STRING cookiename)](#cookie-isset)

[VOID parse(STRING cookieheader)](#cookie-parse)

[VOID set(STRING cookiename, STRING value)](#cookie-set)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;Handle HTTP cookies more easily in Varnish VCL.&lt;/p&gt;</description></item><item><title>VMOD directors - Varnish Directors Module</title><link>https://www.varnish.org/docs/reference/vmod_directors/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_directors/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_directors.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-directors-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import directors [as name] [from &amp;#34;path&amp;#34;]

[new xround_robin = directors.round_robin()](#directors-round-robin)

 [VOID xround_robin.add_backend(BACKEND)](#xround-robin-add-backend)

 [VOID xround_robin.remove_backend(BACKEND)](#xround-robin-remove-backend)

 [BACKEND xround_robin.backend()](#xround-robin-backend)

[new xfallback = directors.fallback(BOOL sticky=0)](#directors-fallback)

 [VOID xfallback.add_backend(BACKEND)](#xfallback-add-backend)

 [VOID xfallback.remove_backend(BACKEND)](#xfallback-remove-backend)

 [BACKEND xfallback.backend()](#xfallback-backend)

[new xrandom = directors.random()](#directors-random)

 [VOID xrandom.add_backend(BACKEND, REAL)](#xrandom-add-backend)

 [VOID xrandom.remove_backend(BACKEND)](#xrandom-remove-backend)

 [BACKEND xrandom.backend()](#xrandom-backend)

[new xhash = directors.hash()](#directors-hash)

 [VOID xhash.add_backend(BACKEND, REAL weight=1.0)](#xhash-add-backend)

 [VOID xhash.remove_backend(BACKEND)](#xhash-remove-backend)

 [BACKEND xhash.backend(STRING)](#xhash-backend)

[new xshard = directors.shard()](#directors-shard)

 [VOID xshard.set_warmup(REAL probability=0.0)](#xshard-set-warmup)

 [VOID xshard.set_rampup(DURATION duration=0)](#xshard-set-rampup)

 [VOID xshard.associate(BLOB param=0)](#xshard-associate)

 [BOOL xshard.add_backend(BACKEND backend, [STRING ident], [DURATION rampup], [REAL weight])](#xshard-add-backend)

 [BOOL xshard.remove_backend([BACKEND backend], [STRING ident])](#xshard-remove-backend)

 [BOOL xshard.clear()](#xshard-clear)

 [BOOL xshard.reconfigure(INT replicas=67)](#xshard-reconfigure)

 [INT xshard.key(STRING)](#xshard-key)

 [BACKEND xshard.backend([ENUM by], [INT key], [BLOB key_blob], [INT alt], [REAL warmup], [BOOL rampup], [ENUM healthy], [BLOB param], [ENUM resolve])](#xshard-backend)

 [VOID xshard.debug(INT)](#xshard-debug)

[new xshard_param = directors.shard_param()](#directors-shard-param)

 [VOID xshard_param.clear()](#xshard-param-clear)

 [VOID xshard_param.set([ENUM by], [INT key], [BLOB key_blob], [INT alt], [REAL warmup], [BOOL rampup], [ENUM healthy])](#xshard-param-set)

 [STRING xshard_param.get_by()](#xshard-param-get-by)

 [INT xshard_param.get_key()](#xshard-param-get-key)

 [INT xshard_param.get_alt()](#xshard-param-get-alt)

 [REAL xshard_param.get_warmup()](#xshard-param-get-warmup)

 [BOOL xshard_param.get_rampup()](#xshard-param-get-rampup)

 [STRING xshard_param.get_healthy()](#xshard-param-get-healthy)

 [BLOB xshard_param.use()](#xshard-param-use)

[BACKEND lookup(STRING)](#directors-lookup)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;vmod_directors&lt;/em&gt; enables backend load balancing in Varnish.&lt;/p&gt;</description></item><item><title>VMOD h2 - Module to control the built-in HTTP2 transport</title><link>https://www.varnish.org/docs/reference/vmod_h2/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_h2/</guid><description>&lt;!-- Copyright (c) 2024 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_h2.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-h2-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import h2 [as name] [from &amp;#34;path&amp;#34;]

[BOOL is()](#h2-is)

[DURATION rapid_reset([DURATION threshold])](#h2-rapid-reset)

[INT rapid_reset_limit([INT number])](#h2-rapid-reset-limit)

[DURATION rapid_reset_period([DURATION duration])](#h2-rapid-reset-period)

[REAL rapid_reset_budget()](#h2-rapid-reset-budget)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;This VMOD contains functions to control the HTTP2 transport built into
Varnish-Cache.&lt;/p&gt;</description></item><item><title>VMOD proxy - Varnish Module to extract TLV attributes from PROXYv2</title><link>https://www.varnish.org/docs/reference/vmod_proxy/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_proxy/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_proxy.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-proxy-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import proxy [as name] [from &amp;#34;path&amp;#34;]

[STRING alpn()](#proxy-alpn)

[STRING authority()](#proxy-authority)

[BOOL is_ssl()](#proxy-is-ssl)

[BOOL client_has_cert_sess()](#proxy-client-has-cert-sess)

[BOOL client_has_cert_conn()](#proxy-client-has-cert-conn)

[INT ssl_verify_result()](#proxy-ssl-verify-result)

[STRING ssl_version()](#proxy-ssl-version)

[STRING client_cert_cn()](#proxy-client-cert-cn)

[STRING ssl_cipher()](#proxy-ssl-cipher)

[STRING cert_sign()](#proxy-cert-sign)

[STRING cert_key()](#proxy-cert-key)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;vmod_proxy&lt;/em&gt; contains functions to extract proxy-protocol-v2 TLV
attributes as described in
&lt;a href="https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt"&gt;https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>VMOD purge - Varnish Purge Module</title><link>https://www.varnish.org/docs/reference/vmod_purge/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_purge/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_purge.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-purge-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import purge [as name] [from &amp;#34;path&amp;#34;]

[INT hard()](#purge-hard)

[INT soft(DURATION ttl, DURATION grace, DURATION keep)](#purge-soft)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;vmod_purge&lt;/em&gt; contains functions that offer a finer-grained control
than &lt;code&gt;return(purge)&lt;/code&gt; from &lt;code&gt;vcl_recv{}&lt;/code&gt;. The functions can only be
called from &lt;code&gt;vcl_hit{}&lt;/code&gt; or &lt;code&gt;vcl_miss{}&lt;/code&gt; and they should in general
be used in both to ensure that all variants of a same object are taken
care of.&lt;/p&gt;</description></item><item><title>VMOD std - Varnish Standard Module</title><link>https://www.varnish.org/docs/reference/vmod_std/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_std/</guid><description>&lt;!-- Copyright (c) 2011-2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_std.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-std-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import std [as name] [from &amp;#34;path&amp;#34;]

[REAL random(REAL lo, REAL hi)](#std-random)

[REAL round(REAL r)](#std-round)

[VOID collect(HEADER hdr, STRING sep=”, “)](#std-collect)

[STRING querysort(STRING)](#std-querysort)

[STRING toupper(STRING s)](#std-toupper)

[STRING tolower(STRING s)](#std-tolower)

[STRING strstr(STRING s1, STRING s2)](#std-strstr)

[BOOL fnmatch(STRING pattern, STRING subject, BOOL pathname, BOOL noescape, BOOL period)](#std-fnmatch)

[STRING fileread(STRING)](#std-fileread)

[BLOB blobread(STRING)](#std-blobread)

[BOOL file_exists(STRING path)](#std-file-exists)

[BOOL healthy(BACKEND be)](#std-healthy)

[INT port(IP ip)](#std-port)

[DURATION duration([STRING s], [DURATION fallback], [REAL real], [INT integer])](#std-duration)

[BYTES bytes([STRING s], [BYTES fallback], [REAL real], [INT integer])](#std-bytes)

[INT integer([STRING s], [INT fallback], [BOOL bool], [BYTES bytes], [DURATION duration], [REAL real], [TIME time])](#std-integer)

[IP ip(STRING s, [IP fallback], BOOL resolve=1, [STRING p])](#std-ip)

[REAL real([STRING s], [REAL fallback], [INT integer], [BOOL bool], [BYTES bytes], [DURATION duration], [TIME time])](#std-real)

[TIME time([STRING s], [TIME fallback], [REAL real], [INT integer])](#std-time)

[STRING strftime(TIME time, STRING format)](#std-strftime)

[VOID log(STRING s)](#std-log)

[VOID syslog(INT priority, STRING s)](#std-syslog)

[VOID timestamp(STRING s)](#std-timestamp)

[BOOL syntax(REAL)](#std-syntax)

[STRING getenv(STRING name)](#std-getenv)

[BOOL cache_req_body(BYTES size)](#std-cache-req-body)

[VOID late_100_continue(BOOL late)](#std-late-100-continue)

[VOID set_ip_tos(INT tos)](#std-set-ip-tos)

[VOID rollback(HTTP h)](#std-rollback)

[BOOL ban(STRING)](#std-ban)

[STRING ban_error()](#std-ban-error)

[TIME now()](#std-now)

[DURATION timed_call(SUB)](#std-timed-call)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;!-- note: not using :ref:`vmod_std(3)` because it expands to "VMOD
std - Varnish Standard Module" and here just the plan vmod name
makes more sense. --&gt;
&lt;p&gt;&lt;em&gt;vmod_std&lt;/em&gt; contains basic functions which are part and parcel of
Varnish, but which for reasons of architecture fit better in a VMOD.&lt;/p&gt;</description></item><item><title>VMOD unix - Utilities for Unix domain sockets</title><link>https://www.varnish.org/docs/reference/vmod_unix/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_unix/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_unix.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-unix-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import unix [as name] [from &amp;#34;path&amp;#34;]

[STRING user()](#unix-user)

[STRING group()](#unix-group)

[INT uid()](#unix-uid)

[INT gid()](#unix-gid)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;This VMOD provides information about the credentials of the peer
process (user and group of the process owner) that is connected to a
Varnish listener via a Unix domain socket, if the platform supports
it.&lt;/p&gt;</description></item><item><title>VMOD vtc - Utility module for varnishtest</title><link>https://www.varnish.org/docs/reference/vmod_vtc/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_vtc/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;!-- NB: This file is machine generated, DO NOT EDIT! --&gt;
&lt;!-- Edit ./vmod_vtc.vcc and run make instead --&gt;
&lt;p&gt;&lt;a id="vmod-vtc-3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="synopsis"&gt;SYNOPSIS&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;import vtc [as name] [from &amp;#34;path&amp;#34;]

[VOID barrier_sync(STRING addr, DURATION timeout=0)](#vtc-barrier-sync)

[BACKEND no_backend()](#vtc-no-backend)

[STEVEDORE no_stevedore()](#vtc-no-stevedore)

[IP no_ip()](#vtc-no-ip)

[VOID panic(STRING)](#vtc-panic)

[VOID sleep(DURATION)](#vtc-sleep)

[VOID workspace_alloc(ENUM, INT size)](#vtc-workspace-alloc)

[BYTES workspace_reserve(ENUM, INT size)](#vtc-workspace-reserve)

[INT workspace_free(ENUM {client, backend, session, thread})](#vtc-workspace-free)

[VOID workspace_snapshot(ENUM)](#vtc-workspace-snapshot)

[VOID workspace_reset(ENUM)](#vtc-workspace-reset)

[BOOL workspace_overflowed(ENUM)](#vtc-workspace-overflowed)

[VOID workspace_overflow(ENUM)](#vtc-workspace-overflow)

[BLOB workspace_dump(ENUM, ENUM, BYTES off, BYTES len)](#vtc-workspace-dump)

[INT typesize(STRING)](#vtc-typesize)

[BLOB proxy_header(ENUM version, IP client, IP server, STRING authority)](#vtc-proxy-header)

[VOID vsl(INT vxid, STRING tag, ENUM {c, b} side, STRING s)](#vtc-vsl)

[VOID vsl_replay(STRING s)](#vtc-vsl-replay)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="description"&gt;DESCRIPTION&lt;/h2&gt;
&lt;p&gt;The goal for this VMOD is to provide VCL users and VMOD authors means to
test corner cases or reach certain conditions with varnishtest.&lt;/p&gt;</description></item><item><title>Vmod_Math</title><link>https://www.varnish.org/docs/reference/vmod_math/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vmod_math/</guid><description>&lt;!-- Copyright (c) 2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;</description></item><item><title>VSL</title><link>https://www.varnish.org/docs/reference/vsl/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vsl/</guid><description>&lt;!-- Copyright (c) 2011-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vsl-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-shared-memory-logging"&gt;Varnish Shared Memory Logging&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="overview"&gt;OVERVIEW&lt;/h3&gt;
&lt;p&gt;This document describes the format and content of all the Varnish shared memory
logging tags. These tags are used by the varnishlog(1), varnishtop(1), etc.
logging tools supplied with Varnish.&lt;/p&gt;
&lt;h4 id="vsl-tags"&gt;VSL tags&lt;/h4&gt;
&lt;dl&gt;
&lt;dt&gt;BackendClose - Backend connection closed&lt;/dt&gt;
&lt;dd&gt;Logged when a backend connection is closed.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %s %s [ %s ]
| | | |
| | | +- Optional reason, see SessClose for explanation
| | +------ &amp;#34;close&amp;#34; or &amp;#34;recycle&amp;#34;
| +--------- Backend display name
+------------ Connection file descriptor
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;BackendOpen - Backend connection opened&lt;/dt&gt;
&lt;dd&gt;Logged when a new backend connection is opened.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %s %s %s %s %s %s [ %f %ld ]
| | | | | | | | |
| | | | | | | | +--- Connection reuses
| | | | | | | +------ Connection age
| | | | | | +----------- &amp;#34;connect&amp;#34; or &amp;#34;reuse&amp;#34;
| | | | | +-------------- Local port
| | | | +----------------- Local address
| | | +-------------------- Remote port
| | +----------------------- Remote address
| +-------------------------- Backend display name
+----------------------------- Connection file descriptor
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Backend_health - Backend health check&lt;/dt&gt;
&lt;dd&gt;The result of a backend health probe.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %s %s %s %u %u %u %f %f %s
| | | | | | | | | |
| | | | | | | | | +- Probe HTTP response / error information
| | | | | | | | +---- Average response time
| | | | | | | +------- Response time
| | | | | | +---------- Probe window size
| | | | | +------------- Probe threshold level
| | | | +---------------- Number of good probes in window
| | | +------------------- Probe window bits
| | +---------------------- &amp;#34;healthy&amp;#34; or &amp;#34;sick&amp;#34;
| +------------------------- &amp;#34;Back&amp;#34;, &amp;#34;Still&amp;#34; or &amp;#34;Went&amp;#34;
+---------------------------- Backend name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
Probe window bits are:
&lt;br/&gt;
```default
'-': Could not connect
'4': Good IPv4
'6': Good IPv6
'U': Good UNIX
'x': Error Xmit
'X': Good Xmit
'r': Error Recv
'R': Good Recv
'H': Happy
```
&lt;br/&gt;
When the backend is just created, the window bits for health check
slots that haven’t run yet appear as ‘-’ like failures to connect.
&lt;/dd&gt;
&lt;dt&gt;Begin - Marks the start of a VXID&lt;/dt&gt;
&lt;dd&gt;The first record of a VXID transaction.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %s [%u]
| | | |
| | | +- Task sub-level
| | +----- Reason
| +-------- Parent vxid
+----------- Type (&amp;#34;sess&amp;#34;, &amp;#34;req&amp;#34; or &amp;#34;bereq&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;BereqAcct - Backend request accounting&lt;/dt&gt;
&lt;dd&gt;Contains byte counters from backend request processing.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %d %d %d %d %d
| | | | | |
| | | | | +- Total bytes received
| | | | +---- Body bytes received
| | | +------- Header bytes received
| | +---------- Total bytes transmitted
| +------------- Body bytes transmitted
+---------------- Header bytes transmitted
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;BereqHeader - Backend request header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;BereqMethod - Backend request method&lt;/dt&gt;
&lt;dd&gt;The HTTP request method used.&lt;/dd&gt;
&lt;dt&gt;BereqProtocol - Backend request protocol&lt;/dt&gt;
&lt;dd&gt;The HTTP protocol version information.&lt;/dd&gt;
&lt;dt&gt;BereqURL - Backend request URL&lt;/dt&gt;
&lt;dd&gt;The HTTP request URL.&lt;/dd&gt;
&lt;dt&gt;BereqUnset - Backend request unset header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;BerespHeader - Backend response header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;BerespProtocol - Backend response protocol&lt;/dt&gt;
&lt;dd&gt;The HTTP protocol version information.&lt;/dd&gt;
&lt;dt&gt;BerespReason - Backend response reason&lt;/dt&gt;
&lt;dd&gt;The HTTP response reason string.&lt;/dd&gt;
&lt;dt&gt;BerespStatus - Backend response status&lt;/dt&gt;
&lt;dd&gt;The HTTP response status code.&lt;/dd&gt;
&lt;dt&gt;BerespUnset - Backend response unset header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;BogoHeader - Bogus HTTP received&lt;/dt&gt;
&lt;dd&gt;Contains the first 20 characters of received HTTP headers we could not make sense of. Applies to both req.http and beresp.http.&lt;/dd&gt;
&lt;dt&gt;CLI - CLI communication&lt;/dt&gt;
&lt;dd&gt;CLI communication between varnishd master and child process.&lt;/dd&gt;
&lt;dt&gt;Debug - Debug messages&lt;/dt&gt;
&lt;dd&gt;Debug messages can normally be ignored, but are sometimes helpful during trouble-shooting. Most debug messages must be explicitly enabled with parameters.
&lt;br/&gt;
Debug messages may be added, changed or removed without prior notice and shouldn’t be considered stable.
&lt;br/&gt;
NB: This log record is masked by default.&lt;/dd&gt;
&lt;dt&gt;ESI_xmlerror - ESI parser error or warning message&lt;/dt&gt;
&lt;dd&gt;An error or warning was generated during parsing of an ESI object. The log record describes the problem encountered.&lt;/dd&gt;
&lt;dt&gt;End - Marks the end of a VXID&lt;/dt&gt;
&lt;dd&gt;The last record of a VXID transaction.&lt;/dd&gt;
&lt;dt&gt;Error - Error messages&lt;/dt&gt;
&lt;dd&gt;Error messages are stuff you probably want to know.&lt;/dd&gt;
&lt;dt&gt;ExpBan - Object evicted due to ban&lt;/dt&gt;
&lt;dd&gt;Logs the VXID when an object is banned.&lt;/dd&gt;
&lt;dt&gt;ExpKill - Object expiry event&lt;/dt&gt;
&lt;dd&gt;&lt;dl&gt;
&lt;dt&gt;Logs events related to object expiry. The events are:&lt;/dt&gt;
&lt;dt&gt;&lt;br/&gt;&lt;/dt&gt;
&lt;dt&gt;EXP_Rearm&lt;/dt&gt;
&lt;dd&gt;Logged when the expiry time of an object changes.
&lt;br/&gt;
EXP_Inbox&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread picks an object from the inbox for processing.
&lt;br/&gt;
EXP_Kill&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread kills an object from the inbox.
&lt;br/&gt;
EXP_When&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread moves an object on the binheap.
&lt;br/&gt;
EXP_Inspect&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread inspects the next object scheduled to expire.
&lt;br/&gt;
EXP_Expired&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread expires an object.
&lt;br/&gt;
EXP_Removed&lt;/dd&gt;
&lt;dd&gt;Logged when the expiry thread removes an object before expiry.
&lt;br/&gt;
VBF_Superseded&lt;/dd&gt;
&lt;dd&gt;Logged when an object supersedes another.
&lt;br/&gt;
LRU_Cand&lt;/dd&gt;
&lt;dd&gt;Logged when an object is evaluated for LRU force expiry.
&lt;br/&gt;
LRU&lt;/dd&gt;
&lt;dd&gt;Logged when an object is force expired due to LRU.
&lt;br/&gt;
LRU_Fail&lt;/dd&gt;
&lt;dd&gt;Logged when no suitable candidate object is found for LRU force expiry.
&lt;br/&gt;
The format is:
&lt;br/&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;EXP_Rearm p=%p E=%f e=%f f=0x%x
EXP_Inbox p=%p e=%f f=0x%x
EXP_Kill p=%p e=%f f=0x%x
EXP_When p=%p e=%f f=0x%x
EXP_Inspect p=%p e=%f f=0x%x
EXP_Expired x=%u t=%f h=%u
EXP_Removed x=%u t=%f h=%u
VBF_Superseded x=%u n=%u
LRU_Cand p=%p f=0x%x r=%d
LRU x=%u
LRU_Fail
&amp;lt;br/&amp;gt;
Legend:
p=%p Objcore pointer
t=%f Remaining TTL (s)
e=%f Expiry time (unix epoch)
E=%f Old expiry time (unix epoch)
f=0x%x Objcore flags
r=%d Objcore refcount
x=%u Object VXID
n=%u New object VXID
h=%u Objcore hits
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;FetchError - Error while fetching object&lt;/dt&gt;
&lt;dd&gt;Logs the error message of a failed fetch operation.&lt;/dd&gt;
&lt;dt&gt;Fetch_Body - Body fetched from backend&lt;/dt&gt;
&lt;dd&gt;Ready to fetch body from backend.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %s %s
| | |
| | +---- &amp;#39;stream&amp;#39; or &amp;#39;-&amp;#39;
| +------- Text description of body fetch mode
+---------- Body fetch mode
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Filters - Body filters&lt;/dt&gt;
&lt;dd&gt;List of filters applied to the body&lt;/dd&gt;
&lt;dt&gt;Gzip - G(un)zip performed on object&lt;/dt&gt;
&lt;dd&gt;A Gzip record is emitted for each instance of gzip or gunzip work performed. Worst case, an ESI transaction stored in gzipped objects but delivered gunzipped, will run into many of these.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%c %c %c %d %d %d %d %d
| | | | | | | |
| | | | | | | +- Bit length of compressed data
| | | | | | +---- Bit location of &amp;#39;last&amp;#39; bit
| | | | | +------- Bit location of first deflate block
| | | | +---------- Bytes output
| | | +------------- Bytes input
| | +---------------- &amp;#39;E&amp;#39;: ESI, &amp;#39;-&amp;#39;: Plain object
| +------------------- &amp;#39;F&amp;#39;: Fetch, &amp;#39;D&amp;#39;: Deliver
+---------------------- &amp;#39;G&amp;#39;: Gzip, &amp;#39;U&amp;#39;: Gunzip, &amp;#39;u&amp;#39;: Gunzip-test
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
Examples:
&lt;br/&gt;
```default
U F E 182 159 80 80 1392
G F E 159 173 80 1304 1314
```
&lt;/dd&gt;
&lt;dt&gt;H2RxBody - Received HTTP2 frame body&lt;/dt&gt;
&lt;dd&gt;Binary data&lt;/dd&gt;
&lt;dt&gt;H2RxHdr - Received HTTP2 frame header&lt;/dt&gt;
&lt;dd&gt;Binary data&lt;/dd&gt;
&lt;dt&gt;H2TxBody - Transmitted HTTP2 frame body&lt;/dt&gt;
&lt;dd&gt;Binary data&lt;/dd&gt;
&lt;dt&gt;H2TxHdr - Transmitted HTTP2 frame header&lt;/dt&gt;
&lt;dd&gt;Binary data&lt;/dd&gt;
&lt;dt&gt;Hash - Value added to hash&lt;/dt&gt;
&lt;dd&gt;This value was added to the object lookup hash.
&lt;br/&gt;
NB: This log record is masked by default.&lt;/dd&gt;
&lt;dt&gt;Hit - Hit object in cache&lt;/dt&gt;
&lt;dd&gt;Object looked up in cache.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%u %f %f %f [%u [%u]]
| | | | | |
| | | | | +- Content length
| | | | +----- Fetched so far
| | | +--------- Keep period
| | +------------ Grace period
| +--------------- Remaining TTL
+------------------ VXID of the object
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;HitMiss - Hit for miss object in cache.&lt;/dt&gt;
&lt;dd&gt;Hit-for-miss object looked up in cache.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%u %f
| |
| +- Remaining TTL
+---- VXID of the object
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;HitPass - Hit for pass object in cache.&lt;/dt&gt;
&lt;dd&gt;Hit-for-pass object looked up in cache.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%u %f
| |
| +- Remaining TTL
+---- VXID of the object
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;HttpGarbage - Unparseable HTTP request&lt;/dt&gt;
&lt;dd&gt;Logs the content of unparseable HTTP requests.&lt;/dd&gt;
&lt;dt&gt;Length - Size of object body&lt;/dt&gt;
&lt;dd&gt;Logs the size of a fetch object body.&lt;/dd&gt;
&lt;dt&gt;Link - Links to a child VXID&lt;/dt&gt;
&lt;dd&gt;Links this VXID to any child VXID it initiates.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %s [%u]
| | | |
| | | +- Child task sub-level
| | +----- Reason
| +-------- Child vxid
+----------- Child type (&amp;#34;sess&amp;#34;, &amp;#34;req&amp;#34; or &amp;#34;bereq&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;LostHeader - Failed attempt to set HTTP header&lt;/dt&gt;
&lt;dd&gt;Logs the header name of a failed HTTP header operation due to resource exhaustion or configured limits.&lt;/dd&gt;
&lt;dt&gt;Notice - Informational messages about request handling&lt;/dt&gt;
&lt;dd&gt;Informational log messages on events occurred during request handling.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Short description of the notice message
+----- Manual page containing the detailed description
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
See the NOTICE MESSAGES section below or the individual VMOD manual pages for detailed information of notice messages.
&lt;/dd&gt;
&lt;dt&gt;ObjHeader - Object header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;ObjProtocol - Object protocol&lt;/dt&gt;
&lt;dd&gt;The HTTP protocol version information.&lt;/dd&gt;
&lt;dt&gt;ObjReason - Object reason&lt;/dt&gt;
&lt;dd&gt;The HTTP response reason string.&lt;/dd&gt;
&lt;dt&gt;ObjStatus - Object status&lt;/dt&gt;
&lt;dd&gt;The HTTP response status code.&lt;/dd&gt;
&lt;dt&gt;ObjUnset - Object unset header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;PipeAcct - Pipe byte counts&lt;/dt&gt;
&lt;dd&gt;Contains byte counters for pipe sessions.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %d %d %d
| | | |
| | | +------- Piped bytes to client
| | +---------- Piped bytes from client
| +------------- Backend request headers
+---------------- Client request headers
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Proxy - PROXY protocol information&lt;/dt&gt;
&lt;dd&gt;PROXY protocol information.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %s %d %s %d
| | | | |
| | | | +- server port
| | | +---- server ip
| | +------- client port
| +---------- client ip
+------------- PROXY protocol version
&amp;lt;br/&amp;gt;
All fields are &amp;#34;local&amp;#34; for PROXY local connections (command 0x0)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;ProxyGarbage - Unparseable PROXY request&lt;/dt&gt;
&lt;dd&gt;A PROXY protocol header was unparseable.&lt;/dd&gt;
&lt;dt&gt;ReqAcct - Request handling byte counts&lt;/dt&gt;
&lt;dd&gt;Contains byte counts for the request handling.
The body bytes count includes transmission overhead (ie: chunked encoding).
ESI sub-requests show the body bytes this ESI fragment including any subfragments contributed to the top level request.
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%d %d %d %d %d %d
| | | | | |
| | | | | +- Total bytes transmitted
| | | | +---- Body bytes transmitted
| | | +------- Header bytes transmitted
| | +---------- Total bytes received
| +------------- Body bytes received
+---------------- Header bytes received
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;ReqHeader - Client request header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;ReqMethod - Client request method&lt;/dt&gt;
&lt;dd&gt;The HTTP request method used.&lt;/dd&gt;
&lt;dt&gt;ReqProtocol - Client request protocol&lt;/dt&gt;
&lt;dd&gt;The HTTP protocol version information.&lt;/dd&gt;
&lt;dt&gt;ReqStart - Client request start&lt;/dt&gt;
&lt;dd&gt;Start of request processing. Logs the client address, port number and listener endpoint name (from the -a command-line argument).
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %s %s
| | |
| | +-- Listener name (from -a)
| +----- Client Port number (0 for Unix domain sockets)
+-------- Client IP4/6 address (0.0.0.0 for UDS)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;ReqURL - Client request URL&lt;/dt&gt;
&lt;dd&gt;The HTTP request URL.&lt;/dd&gt;
&lt;dt&gt;ReqUnset - Client request unset header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;RespHeader - Client response header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;RespProtocol - Client response protocol&lt;/dt&gt;
&lt;dd&gt;The HTTP protocol version information.&lt;/dd&gt;
&lt;dt&gt;RespReason - Client response reason&lt;/dt&gt;
&lt;dd&gt;The HTTP response reason string.&lt;/dd&gt;
&lt;dt&gt;RespStatus - Client response status&lt;/dt&gt;
&lt;dd&gt;The HTTP response status code.&lt;/dd&gt;
&lt;dt&gt;RespUnset - Client response unset header&lt;/dt&gt;
&lt;dd&gt;HTTP header contents.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %s
| |
| +- Header value
+----- Header name
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NOTE: HTTP header fields are free form records and not strictly
made of 2 fields. Accessing a specific header with the prefix
notation helps treating the header value as a single string.
&lt;/dd&gt;
&lt;dt&gt;SessClose - Client connection closed&lt;/dt&gt;
&lt;dd&gt;SessClose is the last record for any client connection.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %f
| |
| +- How long the session was open
+---- Why the connection closed
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
Explanation of reasons (first column):
: * `REM_CLOSE`: Client Closed
 * `REQ_CLOSE`: Client requested close
 * `REQ_HTTP10`: Proto &lt; HTTP/1.1
 * `RX_BAD`: Received bad req/resp
 * `RX_BODY`: Failure receiving body
 * `RX_JUNK`: Received junk data
 * `RX_OVERFLOW`: Received buffer overflow
 * `RX_TIMEOUT`: Receive timeout
 * `RX_CLOSE_IDLE`: timeout_idle reached
 * `TX_PIPE`: Piped transaction
 * `TX_ERROR`: Error transaction
 * `TX_EOF`: EOF transmission
 * `RESP_CLOSE`: Backend/VCL requested close
 * `OVERLOAD`: Out of some resource
 * `PIPE_OVERFLOW`: Session pipe overflow
 * `RANGE_SHORT`: Insufficient data for range
 * `REQ_HTTP20`: HTTP2 not accepted
 * `VCL_FAILURE`: VCL failure
 * `RAPID_RESET`: HTTP2 rapid reset
&lt;/dd&gt;
&lt;dt&gt;SessError - Client connection accept failed&lt;/dt&gt;
&lt;dd&gt;Accepting a client connection has failed.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %s %s %d %d %s
| | | | | |
| | | | | +- Detailed error message
| | | | +---- Error Number (errno) from accept(2)
| | | +------- File descriptor number
| | +---------- Local TCP port / 0 for UDS
| +------------- Local IPv4/6 address / 0.0.0.0 for UDS
+---------------- Socket name (from -a argument)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;SessOpen - Client connection opened&lt;/dt&gt;
&lt;dd&gt;The first record for a client connection, with the socket-endpoints of the connection.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %s %s %s %f %d
| | | | | | |
| | | | | | +- File descriptor number
| | | | | +---- Session start time (unix epoch)
| | | | +------- Local TCP port / 0 for UDS
| | | +---------- Local IPv4/6 address / 0.0.0.0 for UDS
| | +------------- Socket name (from -a argument)
| +---------------- Remote TCP port / 0 for UDS
+------------------- Remote IPv4/6 address / 0.0.0.0 for UDS
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;Storage - Where object is stored&lt;/dt&gt;
&lt;dd&gt;Type and name of the storage backend the object is stored in.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %s
| |
| +- Name of storage backend
+---- Type (&amp;#34;malloc&amp;#34;, &amp;#34;file&amp;#34;, &amp;#34;persistent&amp;#34; etc.)
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;TTL - TTL set on object&lt;/dt&gt;
&lt;dd&gt;A TTL record is emitted whenever the ttl, grace or keep values for an object is set as well as whether the object is cacheable or not.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %d %d %d [ %d %d %u %u ] %s
| | | | | | | | | |
| | | | | | | | | +- &amp;#34;cacheable&amp;#34; or &amp;#34;uncacheable&amp;#34;
| | | | | | | | +------ Max-Age from Cache-Control header
| | | | | | | +--------- Expires header
| | | | | | +------------ Date header
| | | | | +--------------- Age (incl Age: header value)
| | | | +-------------------- Reference time for TTL
| | | +----------------------- Keep
| | +-------------------------- Grace
| +----------------------------- TTL
+-------------------------------- &amp;#34;RFC&amp;#34;, &amp;#34;VCL&amp;#34; or &amp;#34;HFP&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
The four optional fields are only present in “RFC” headers.
&lt;br/&gt;
Examples:
&lt;br/&gt;
```default
RFC 60 10 -1 1312966109 1312966109 1312966109 0 60 cacheable
VCL 120 10 0 1312966111 uncacheable
HFP 2 0 0 1312966113 uncacheable
```
&lt;/dd&gt;
&lt;dt&gt;Timestamp - Timing information&lt;/dt&gt;
&lt;dd&gt;Contains timing information for the Varnish worker threads.
&lt;br/&gt;
Time stamps are issued by Varnish on certain events, and show the absolute time of the event, the time spent since the start of the work unit, and the time spent since the last timestamp was logged. See the TIMESTAMPS section below for information about the individual time stamps.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s: %f %f %f
| | | |
| | | +- Time since last timestamp
| | +---- Time since start of work unit
| +------- Absolute time of event
+----------- Event label
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;VCL_Error - VCL execution error message&lt;/dt&gt;
&lt;dd&gt;Logs error messages generated during VCL execution.&lt;/dd&gt;
&lt;dt&gt;VCL_Log - Log statement from VCL&lt;/dt&gt;
&lt;dd&gt;User generated log messages insert from VCL through std.log()&lt;/dd&gt;
&lt;dt&gt;VCL_acl - VCL ACL check results&lt;/dt&gt;
&lt;dd&gt;ACLs with the +log flag emits this record with the result.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s [%s [%s [fixed: %s]]]
| | | |
| | | +- Fix info (see below)
| | +------------ Matching entry (only for MATCH)
| +---------------- Name of the ACL for MATCH or NO_MATCH
+-------------------- MATCH, NO_MATCH or NO_FAM
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
* Fix info: either contains network/mask for non-canonical entries (see acl +pedantic flag) or `folded` for entries which were the result of a fold operation (see acl +fold flag).
* `MATCH` denotes an ACL match
* `NO_MATCH` denotes that a checked ACL has not matched
* `NO_FAM` denotes a missing address family and should not occur.
&lt;/dd&gt;
&lt;dt&gt;VCL_call - VCL method called&lt;/dt&gt;
&lt;dd&gt;Logs the VCL method name when a VCL method is called.&lt;/dd&gt;
&lt;dt&gt;VCL_return - VCL method return value&lt;/dt&gt;
&lt;dd&gt;Logs the VCL method terminating statement.&lt;/dd&gt;
&lt;dt&gt;VCL_trace - VCL trace data&lt;/dt&gt;
&lt;dd&gt;Logs VCL execution trace data.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %u %u.%u.%u
| | | | |
| | | | +- VCL program line position
| | | +---- VCL program line number
| | +------- VCL program source index
| +---------- VCL trace point index
+------------- VCL configname
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NB: This log record is masked by default.
&lt;/dd&gt;
&lt;dt&gt;VCL_use - VCL in use&lt;/dt&gt;
&lt;dd&gt;Records the name of the VCL being used.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s [ %s %s ]
| | |
| | +- Name of label used to find it
| +---- &amp;#34;via&amp;#34;
+--------- Name of VCL put in use
&lt;/code&gt;&lt;/pre&gt;&lt;/dd&gt;
&lt;dt&gt;VSL - VSL API warnings and error message&lt;/dt&gt;
&lt;dd&gt;Warnings and error messages generated by the VSL API while reading the shared memory log.&lt;/dd&gt;
&lt;dt&gt;VdpAcct - Deliver filter accounting&lt;/dt&gt;
&lt;dd&gt;Contains name of VDP and statistics.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %d
| | |
| | +- Total bytes produced
| +---- Number of calls made
+------- Name of filter
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NB: This log record is masked by default.
&lt;/dd&gt;
&lt;dt&gt;VfpAcct - Fetch filter accounting&lt;/dt&gt;
&lt;dd&gt;Contains name of VFP and statistics.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%s %d %d
| | |
| | +- Total bytes produced
| +---- Number of calls made
+------- Name of filter
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NB: This log record is masked by default.
&lt;/dd&gt;
&lt;dt&gt;Witness - Lock order witness records&lt;/dt&gt;
&lt;dd&gt;Diagnostic recording of locking order.&lt;/dd&gt;
&lt;dt&gt;WorkThread - Logs thread start/stop events&lt;/dt&gt;
&lt;dd&gt;Logs worker thread creation and termination events.
&lt;br/&gt;
The format is:
&lt;br/&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-default" data-lang="default"&gt;%p %s
| |
| +- [start|end]
+---- Worker struct pointer
&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;
NB: This log record is masked by default.
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id="timestamps"&gt;TIMESTAMPS&lt;/h3&gt;
&lt;p&gt;Timestamps are inserted in the log on completing certain events during
the worker thread’s task handling. The timestamps has a label showing
which event was completed. The reported fields show the absolute time
of the event, the time spent since the start of the task and the time
spent since the last timestamp was logged.&lt;/p&gt;</description></item><item><title>vsl-query</title><link>https://www.varnish.org/docs/reference/vsl-query/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vsl-query/</guid><description>&lt;!-- Copyright (c) 2013-2021 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vsl-query-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-vsl-query-expressions"&gt;Varnish VSL Query Expressions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="overview"&gt;OVERVIEW&lt;/h3&gt;
&lt;p&gt;The Varnish VSL Query Expressions extracts transactions from the
Varnish shared memory log, and perform queries on the transactions
before reporting matches.&lt;/p&gt;
&lt;p&gt;A transaction is a set of log lines that belongs together, e.g. a
client request or a backend request. The API monitors the log, and
collects all log records that make up a transaction before reporting
on that transaction. Transactions can also be grouped, meaning backend
transactions are reported together with the client transaction that
initiated it.&lt;/p&gt;</description></item><item><title>VSM: Shared Memory Logging and Statistics</title><link>https://www.varnish.org/docs/reference/vsm/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vsm/</guid><description>&lt;!-- Copyright (c) 2011-2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-vsm"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Varnish uses shared memory to export parameters, logging and
statistics, because it is faster and much more efficient than
regular files.&lt;/p&gt;
&lt;p&gt;“Varnish Shared Memory” or VSM, is the overall mechanism maintaining
sets of shared memory files, each consisting a chunk of memory
identified by a two-part name (class, ident).&lt;/p&gt;
&lt;p&gt;The Class indicates what type of data is stored in the chunk,
for instance “Arg” for command line arguments useful for
establishing an CLI connection to the varnishd, “Stat” for
statistics counters (VSC) and “Log” for log records (VSL).&lt;/p&gt;</description></item><item><title>VTC</title><link>https://www.varnish.org/docs/reference/vtc/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vtc/</guid><description>&lt;!-- Copyright (c) 2016-2017 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vtc-7"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="varnish-test-case-syntax"&gt;Varnish Test Case Syntax&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manual section:&lt;/strong&gt;
7&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="overview"&gt;OVERVIEW&lt;/h3&gt;
&lt;p&gt;This document describes the syntax used by Varnish Test Cases files (.vtc).
A vtc file describe a scenario with different scripted HTTP-talking entities,
and generally one or more Varnish instances to test.&lt;/p&gt;
&lt;h3 id="parsing"&gt;PARSING&lt;/h3&gt;
&lt;p&gt;A vtc file will be read word after word, with very little tokenization, meaning
a syntax error won’t be detected until the test actually reach the relevant
action in the test.&lt;/p&gt;</description></item><item><title>VTLA - Varnish Three Letter Acronyms</title><link>https://www.varnish.org/docs/reference/vtla/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/vtla/</guid><description>&lt;!-- Copyright (c) 2019-2020 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="vtla"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Very early in the project, we made a fortunate bargain on eBay,
buying up a batch of 676 three letter acronyms, all starting with
‘V’.&lt;/p&gt;
&lt;p&gt;This page tells you what we use them for, if &amp;amp; when we remember to
add them…&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;VAV&lt;/dt&gt;
&lt;dd&gt;Varnish Arg Vector – Argv parsing.&lt;/dd&gt;
&lt;dt&gt;VBE&lt;/dt&gt;
&lt;dd&gt;Varnish Back End – Code for contacting backends
(bin/varnishd/cache_backend.c)&lt;/dd&gt;
&lt;dt&gt;VBP&lt;/dt&gt;
&lt;dd&gt;Varnish Backend Polling – Health checks of backends
(bin/varnishd/cache_backend_poll.c)&lt;/dd&gt;
&lt;dt&gt;VCA&lt;/dt&gt;
&lt;dd&gt;Varnish Connection Acceptor – The code that receives/accepts the
TCP connections (bin/varnishd/cache_acceptor.c)&lt;/dd&gt;
&lt;dt&gt;VCC&lt;/dt&gt;
&lt;dd&gt;VCL to C Compiler – The code that compiles VCL to C code. (lib/libvcl)&lt;/dd&gt;
&lt;dt&gt;VCF&lt;/dt&gt;
&lt;dd&gt;Varnish CatFlap&lt;/dd&gt;
&lt;dt&gt;VCL&lt;/dt&gt;
&lt;dd&gt;Varnish Configuration Language – The domain-specific programming
language used for configuring a varnishd.&lt;/dd&gt;
&lt;dt&gt;VCT&lt;/dt&gt;
&lt;dd&gt;Varnish CType(3) – Character classification for RFC2616 and XML parsing.&lt;/dd&gt;
&lt;dt&gt;VDD&lt;/dt&gt;
&lt;dd&gt;Varnish (Core) Developer Day – Quarterly invite-only meeting strictly
for Varnish core (C) developers, packagers and VMOD hackers.&lt;/dd&gt;
&lt;dt&gt;VENC&lt;/dt&gt;
&lt;dd&gt;Varnish ENCoding – base64 functions&lt;/dd&gt;
&lt;dt&gt;VEND&lt;/dt&gt;
&lt;dd&gt;Varnish ENDianess – functions to marshall data in specified endianness&lt;/dd&gt;
&lt;dt&gt;VEV&lt;/dt&gt;
&lt;dd&gt;Varnish EVent – library functions to implement a simple event-dispatcher.&lt;/dd&gt;
&lt;dt&gt;VEXT&lt;/dt&gt;
&lt;dd&gt;Varnish Extension – Shared library loaded into the child process.&lt;/dd&gt;
&lt;dt&gt;VGB&lt;/dt&gt;
&lt;dd&gt;Varnish Governing Board – May or may not exist.
If you need to ask, you are not on it.&lt;/dd&gt;
&lt;dt&gt;VGC&lt;/dt&gt;
&lt;dd&gt;Varnish Generated Code – Code generated by VCC from VCL.&lt;/dd&gt;
&lt;dt&gt;VIN&lt;/dt&gt;
&lt;dd&gt;Varnish Instance Naming – Resolution of -n arguments.&lt;/dd&gt;
&lt;dt&gt;VLU&lt;/dt&gt;
&lt;dd&gt;Varnish Line Up – library functions to collect stream of bytes
into lines for processing. (lib/libvarnish/vlu.c)&lt;/dd&gt;
&lt;dt&gt;VPI&lt;/dt&gt;
&lt;dd&gt;VCC Private Interface – functions in varnishd which only VCC is
allowed to call.&lt;/dd&gt;
&lt;dt&gt;VRE&lt;/dt&gt;
&lt;dd&gt;Varnish Regular Expression – library functions for regular expression
based matching and substring replacement. (lib/libvarnish/vre.c)&lt;/dd&gt;
&lt;dt&gt;VRT&lt;/dt&gt;
&lt;dd&gt;Varnish Run Time – functions called from compiled code.
(bin/varnishd/cache_vrt.c)&lt;/dd&gt;
&lt;dt&gt;VRY&lt;/dt&gt;
&lt;dd&gt;VaRY – Related to processing of Vary: HTTP headers.
(bin/varnishd/cache_vary.c)&lt;/dd&gt;
&lt;dt&gt;VSL&lt;/dt&gt;
&lt;dd&gt;Varnish Shared memory Log – The log written into the shared
memory segment for varnish{log,ncsa,top,hist} to see.&lt;/dd&gt;
&lt;dt&gt;VSB&lt;/dt&gt;
&lt;dd&gt;Varnish string Buffer – a copy of the FreeBSD “sbuf” library,
for safe string handling.&lt;/dd&gt;
&lt;dt&gt;VSC&lt;/dt&gt;
&lt;dd&gt;Varnish Statistics Counter – counters for various stats,
exposed via varnishapi.&lt;/dd&gt;
&lt;dt&gt;VSS&lt;/dt&gt;
&lt;dd&gt;Varnish Session Stuff – library functions to wrap DNS/TCP.
(lib/libvarnish/vss.c)&lt;/dd&gt;
&lt;dt&gt;VTC&lt;/dt&gt;
&lt;dd&gt;Varnish Test Code – a test-specification for the varnishtest program.&lt;/dd&gt;
&lt;dt&gt;VTE&lt;/dt&gt;
&lt;dd&gt;Varnish Turbo Encabulator&lt;/dd&gt;
&lt;dt&gt;VTLA&lt;/dt&gt;
&lt;dd&gt;Varnish Three Letter Acronym – No rule without an exception.&lt;/dd&gt;
&lt;dt&gt;VUG&lt;/dt&gt;
&lt;dd&gt;Varnish User Group meeting – Half-yearly event where the users and
developers of Varnish Cache gather to share experiences and plan
future development.&lt;/dd&gt;
&lt;dt&gt;VUT&lt;/dt&gt;
&lt;dd&gt;Varnish UTilities – An API for client utilities to tap into VSM or VSC.&lt;/dd&gt;
&lt;dt&gt;VWx&lt;/dt&gt;
&lt;dd&gt;Varnish Waiter ‘x’ – A code module to monitor idle sessions.&lt;/dd&gt;
&lt;dt&gt;VWE&lt;/dt&gt;
&lt;dd&gt;Varnish Waiter Epoll – epoll(2) (linux) based waiter module.&lt;/dd&gt;
&lt;dt&gt;VWK&lt;/dt&gt;
&lt;dd&gt;Varnish Waiter Kqueue – kqueue(2) (freebsd) based waiter module.&lt;/dd&gt;
&lt;dt&gt;VWP&lt;/dt&gt;
&lt;dd&gt;Varnish Waiter Poll – poll(2) based waiter module.&lt;/dd&gt;
&lt;dt&gt;VWS&lt;/dt&gt;
&lt;dd&gt;Varnish Waiter Solaris – Solaris ports(2) based waiter module.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h2 id="copyright"&gt;COPYRIGHT&lt;/h2&gt;
&lt;p&gt;This document is licensed under the same licence as Varnish
itself. See LICENCE for details.&lt;/p&gt;</description></item><item><title>Writing a Director</title><link>https://www.varnish.org/docs/reference/directors/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.varnish.org/docs/reference/directors/</guid><description>&lt;!-- Copyright (c) 2015-2019 Varnish Software AS
SPDX-License-Identifier: BSD-2-Clause
See LICENSE file for full text of license --&gt;
&lt;p&gt;&lt;a id="ref-writing-a-director"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Varnish already provides a set of general-purpose directors, and since Varnish
4, it is bundled in the built-in &lt;a href="https://www.varnish.org/docs/reference/vmod_directors/#vmod-directors-3"&gt;VMOD directors - Varnish Directors Module&lt;/a&gt;. Writing a director
boils down to writing a VMOD, using the proper data structures and APIs. Not
only can you write your own director if none of the built-ins fit your needs,
but since Varnish 4.1 you can even write your own backends.&lt;/p&gt;</description></item></channel></rss>