Search
Varnish Enterprise

Enterprise extensions reference

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.

Parameters added

Backend and timeouts

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).

TLS

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.

MSE, memory governor, and storage

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).

Networking and HTTP/2

See also HTTP/2 and NUMA.

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.

vmod_http thread pool

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.

Scoreboard and licensing

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.

Changed parameter defaults

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.

VCL additions

Variables

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.

The param namespace

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.

Subroutines and return actions

  • 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.

Built-in VCL differences

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.
  • The hit-for-miss TTL is set beresp.ttl = param.uncacheable_ttl; instead of a hard-coded 120 seconds.
  • The Surrogate-Control and Cache-Control checks that mark responses uncacheable match case-insensitively.
  • The subroutines vcl_connect and vcl_vha_internal exist (see above).

CLI and tools

Added varnishadm commands

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.

Added varnishd options

  • -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.

Enterprise binaries

  • 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.

Also available in recent open source releases

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].


®Varnish Software, Wallingatan 12, 111 60 Stockholm, Organization nr. 556805-6203