Varnish Enterprise 6.0 is based on Varnish Cache 6.0 and extends it with additional runtime parameters, VCL variables and subroutines, CLI commands, and tools. This page is a reference for those extensions, for readers who know open source Varnish and want to see what is different. Where a feature has its own documentation page, the group heading links to it.
Items that also appear in open source Varnish releases newer than 6.0 are collected in the final section rather than listed as Enterprise extensions.
Use varnishadm param.show <name> for the full description of any
parameter. Parameters marked experimental below carry that flag in
param.show output.
See also Timeouts.
| Parameter | Default | Description |
|---|---|---|
last_byte_timeout |
0 | Maximum time to wait for a complete backend response. Zero means wait forever. Can be overridden per backend and per request (see the VCL section below). |
backend_tls_sess_cache |
30 | Maximum number of TLS sessions cached per backend endpoint for session resumption. Increase if backends are mostly TLS 1.3 (single-use tickets) with high connection rates; 0 disables caching. |
backend_cooloff |
60.0 | How long to wait before cleaning up deleted backends (experimental). |
timeout_reqbody |
0.0 | Maximum time to receive a client request body, measured from the first header byte; the client connection is closed when reached (experimental). |
Frontend (in-process) TLS is configured with the -A option and the
tls.cert.* CLI family; see
In-Process TLS and
Backend TLS.
| Parameter | Default | Description |
|---|---|---|
tls_handshake_timeout |
8 | Time allowed for a TLS handshake to complete before giving up. |
tls_ja3 |
off | Enable JA3 client fingerprinting. |
tls_err_dup_servername |
off | Make loading a certificate whose name matches an already loaded certificate an error. |
tls_cleanup_batch |
100 | Maximum SSL_CTX objects freed per CLI command, to keep certificate reloads from blocking the CLI thread (experimental). |
tls_crl_strict |
on | When CRL checking is enabled, fail the handshake if a CRL is missing or expired. Certificates that appear in a CRL are always rejected regardless. |
tls_ocsp_auto |
off | Enable automatic OCSP staple configuration. Must be set on the command line. |
tls_ocsp_fetch_limit |
10 | Upper limit on OCSP responses fetched in parallel. |
tls_ocsp_refresh_ratio |
0.5 | When to refresh an OCSP response, as a ratio of its lifetime. |
tls_ocsp_default_ttl |
7200.0 | How long an OCSP response without a nextUpdate property is considered fresh. |
tls_ocsp_dir |
(build-time) | Directory for the OCSP response cache. Requires restart. |
ssl_buffer |
20k | Size of the SSL buffer. |
pool_sslbuffer |
10,100,10 | Memory pool parameters for the SSL buffer pool. |
See also Memory Governor, MSE 4 and Transit Buffer.
| Parameter | Default | Description |
|---|---|---|
memory_target |
80% | Target anonymous memory usage of the cache worker when the memory governor is active. Percentage of host physical RAM or absolute bytes; runtime-changeable. |
memory_stat_interval |
0.1 | Interval between memory usage statistics updates for the governor. |
memory_eviction_factor |
1.0 | Multiplier on the amount of memory to evict before admitting new content while over the target. |
memory_eviction_max_items |
128 | Maximum items selected per governor eviction run. |
memory_arenas |
0 | Number of jemalloc arenas dedicated to object payload storage; 0 shares the default arenas. Requires restart (experimental). |
transit_buffer |
0 | Default number of bytes the backend fetch may be ahead of the client during a streaming private transaction; prevents large streaming transfers from consuming unbounded memory. 0 disables. |
uncacheable_ttl |
120.0 | TTL assigned to uncacheable (hit-for-miss) objects by the built-in VCL. |
tolerate_unsupported_bans |
off | Load bans that this version cannot parse and treat them as matching everything, instead of refusing to start. |
ban_start_lists |
64 | Number of sub object lists for objects at the start of the ban list. Requires restart. |
object_mutex_slots |
4096 | Mutex/condvar slots for per-object signalling; more slots may reduce contention. Requires restart. |
ykey_mem_digest_split_bits |
4 | Ykey ephemeral index: bits used to select the tree set per key hash. Requires restart. |
ykey_mem_tree_split |
7 | Ykey ephemeral index: trees that objects with the same hash are spread over. Requires restart. |
slicer_excess_ratio |
0.5 | How much larger than the configured slicer segment size the final segment may be. |
crypto_buffer |
32k | Buffer size for Total Encryption processing (experimental). |
epitaphs |
3 | Maximum messages the cache process can leave for its successor via the manager (experimental). |
| Parameter | Default | Description |
|---|---|---|
reuseport |
off | Listen on an already bound address and load-balance incoming clients between pools; requires kernel SO_REUSEPORT. Must be set on the command line (experimental). |
numa_aware |
off | NUMA awareness for multi-socket systems; requires reuseport=on and kernel eBPF support. Must be set on the command line (experimental). |
shutdown_close |
off | Close listen sockets during shutdown_delay when SIGTERM is received. |
http_brotli_support |
on | Enable Brotli: request and store compressed objects, decompress on demand for clients without Brotli support. |
esi_limit |
10 | ESI fragments processed in parallel per ESI level per client request. |
allow_exec |
off | Allow executable files and function calls (deprecated; use is discouraged). |
nodes_read_delay |
0.05 | Time to let a configuration file stabilize after an inotify event before vmod nodes reads it. |
vsm_publish_interval |
1.0 | Minimum interval between publications of new VSM segment indexes. |
These control the thread pool that services asynchronous
http VMOD requests.
| Parameter | Default | Description |
|---|---|---|
vmod_http_threads |
10 | Threads used to service abandoned requests. |
vmod_http_min_tasks_thread |
100 | Minimum tasks per thread before load splits onto additional threads. |
vmod_http_max_tasks_total |
1000 | Maximum active tasks before new tasks are rejected. |
vmod_http_max_conn |
25 | Connections kept open for reuse per execution thread. |
vmod_http_pool_timeout |
118 | Idle timeout before unused pooled connections are closed. |
vmod_http_prefer_http_11 |
on | Prefer HTTP/1.1 when negotiating new connections. |
vmod_http_require_http |
on | Only enable the HTTP and HTTPS protocols. |
See also Varnish Scoreboard.
| Parameter | Default | Description |
|---|---|---|
vst_space |
10M | Space per thread pool for the task-tracking (scoreboard) memory segment; none disables task tracking. Requires restart (experimental). |
scoreboard_active |
on | Deprecated alias of vst_space. |
exit_no_license |
off | Exit immediately on startup when no license file is provided (license-enforcing builds). |
license_early_warn |
30 | Days before license expiry to start logging a daily warning; 0 disables. |
license_verify |
off | Run license.status and exit after loading the license file. |
These parameters exist in open source Varnish 6.0 but have different defaults in Varnish Enterprise:
| Parameter | OSS 6.0 default | Enterprise default |
|---|---|---|
cli_limit |
48k | 128k |
vsl_reclen |
255b | 4084b |
shm_reclen (alias of vsl_reclen) |
255b | 4084b |
workspace_thread |
0.50k | 0.75k |
h2_max_header_list_size |
2147483647b | 0b (0 means 150% of http_req_size) |
h2_initial_window_size |
65535b (minimum 0) | 65535b (minimum raised to 65535b) |
vcc_err_unref |
on | off |
The wait_silo feature bit is removed: the deprecated persistent
silo stevedore does not exist in Varnish Enterprise.
| Variable | Where | Description |
|---|---|---|
bereq.last_byte_timeout |
read/write in backend subs | Total time to wait for a response from the backend. Defaults to the .last_byte_timeout backend attribute (also an Enterprise addition), which defaults to the last_byte_timeout parameter. Not available in pipe mode. |
beresp.transit_buffer |
read/write in vcl_backend_response |
Maximum number of bytes the backend fetch may be ahead of the client during a streaming pass. |
req.is_reset |
read in vcl_synth |
True if the client disconnected or the HTTP/2 stream was reset. |
req_top.time |
read in client subs | When the top-level request was fully received; constant across restarts. |
bereq.time |
read in vcl_pipe, backend subs |
When preparation of the first backend request started; constant across retries. |
beresp.time |
read in vcl_backend_response, vcl_backend_error |
When the backend headers were fully received, or when vcl_backend_error was entered. |
resp.time |
read in vcl_deliver, vcl_synth |
When preparation of the response started. |
obj.time |
read in vcl_hit, vcl_deliver |
When the object was created, from the perspective of the server that generated it (roughly now - obj.age). |
obj.xid |
read in vcl_hit, vcl_deliver |
Unique ID of the backend request that fetched this object. |
req.hash |
write in vcl_hash; also readable in vcl_synth, vcl_pipe, vcl_connect |
The hash key of the request is writable and readable in more subroutines than in OSS 6.0. |
VCL can read a set of runtime parameters directly through the
read-only param.* namespace, available in all subroutines. Values
are read live: a param.set through varnishadm is visible to the
next use in VCL without a reload.
sub vcl_backend_fetch {
# Give this one endpoint a longer first-byte allowance than
# the global parameter, scaled off the configured value.
if (bereq.url ~ "^/slow-report/") {
set bereq.first_byte_timeout =
param.first_byte_timeout + 30s;
}
}
Available: param.backend_idle_timeout, param.backend_wait_limit,
param.backend_wait_timeout, param.between_bytes_timeout,
param.connect_timeout, param.default_grace, param.default_keep,
param.default_ttl, param.first_byte_timeout,
param.idle_send_timeout, param.max_esi_depth,
param.max_restarts, param.max_retries, param.pipe_timeout,
param.send_timeout, param.shortlived, param.thread_pool_max,
param.thread_pool_min, param.thread_pool_reserve,
param.thread_pools, param.thread_queue_limit,
param.timeout_idle, param.transit_buffer,
param.uncacheable_ttl.
Counting parameters are INT, sizes are BYTES, and timeouts are DURATION, matching the parameter’s own type.
return (connect) from vcl_recv, and the new subroutine
sub vcl_connect, handle HTTP CONNECT tunneling.sub vcl_vha_internal exists for the Varnish High Availability
replication engine. It is internal; do not use it directly.The built-in VCL (appended to every loaded VCL) differs from open source 6.0 in the following ways:
vcl_recv returns a 400 synthetic response for requests whose URL
does not start with / (except OPTIONS * and CONNECT requests).vcl_synth short-circuits with return (deliver) when
req.is_reset is true — no point rendering an error page for a
client that is gone.set beresp.ttl = param.uncacheable_ttl;
instead of a hard-coded 120 seconds.Surrogate-Control and Cache-Control checks that mark
responses uncacheable match case-insensitively.vcl_connect and vcl_vha_internal exist (see
above).Commands marked sensitive by Varnish Enterprise (certificate and license handling) are not logged to the Varnish log.
Socket management (graceful drain/offline):
socket.list — list all listen sockets and their state.socket.close / socket.open — close or reopen all listen
sockets. On close, HTTP/2 clients get GOAWAY and keep-alive clients
get Connection: close.Frontend TLS certificates (see In-Process TLS):
tls.cert.load — load a certificate, with options for key file,
ciphers, protocols, SNI filter, client certificate verification, CA
file, security level, and CRL.tls.cert.list, tls.cert.commit, tls.cert.rollback,
tls.cert.reload, tls.cert.discard, tls.cert.staple.Backend TLS client certificates (see Backend TLS):
backend.cert.load, backend.cert.list, backend.cert.discard.Licensing:
license.load, license.show, license.status.MSE (version 3):
mse.flush_memcache, mse.lmdb_readers, mse.lmdb_lock, plus
debug commands.MSE4 (see MSE 4):
mse4.status — book and store states.mse4.fail / mse4.reset — fail a device / reinitialize an
offline device (data loss on reset).mse4.sync, mse4.flush_memcache,
mse4.purge_unreachable_objects, mse4.aio_engine,
mse4.can_iouring.VCL and general:
vcl.load_files — compile and load multiple VCL files as one
configuration.vcl.load -v — verbose load with timing output.vcl.show — the configuration name argument is now optional.param.set -j — JSON echo of the updated value.identity [-j] — show the server identity (varnishd -i).version, banner — JSON output variants.panic.clear -z — also clears the related counters.-A cfgfile — listen endpoint / TLS configuration file for native
TLS termination.-z id=certfile — backend TLS client certificate (repeatable).-L file — Varnish Enterprise license file.-E secret-file — secret file for Total Encryption.-s mse and -s mse4 — the MSE storage engines.mkfs.mse — initialize MSE (version 3) books and stores.mkfs.mse4 — initialize MSE4 persisted storage.varnishlog-json — display Varnish logs in JSON format.varnishscoreboard — live view of worker thread and task state
(backed by the vst_space segments; see
Varnish Scoreboard).vha-agent — the Varnish High Availability agent.The following ship in Varnish Enterprise 6.0 but were also added to open source Varnish in releases after 6.0, so they are not exclusive to Enterprise. If you administer both, check your OSS version.
Parameters: backend_wait_timeout and backend_wait_limit
(queue transactions waiting for a backend connection), timeout_req
(maximum time to receive request headers), h2_window_timeout,
h2_rapid_reset, h2_rapid_reset_limit, h2_rapid_reset_period
(HTTP/2 rapid-reset mitigation; OSS 6.0 LTS gained these in 6.0.12),
h2_rxbuf_storage, shutdown_delay, startup_timeout, max_vcl,
max_vcl_handling, vcc_vmod_restrict.
VCL: req.hash_ignore_vary, req.time, bereq.is_hitmiss,
bereq.is_hitpass, obj.can_esi, resp.send_timeout,
sess.timeout_idle, extended resp.status semantics (XXYZZ status
codes where only YZZ is sent to the client), return (error) from
the backend-side subroutines, and the simplified built-in vcl_hit
(hit/grace decisions moved into core code).
CLI: param.reset, pid [-j].