Varnish Enterprise 6.0.18r6 is a feature and bug fix release.
The release adds decompression of gzipped request bodies, a dry-run
mode for the logging utilities, better retry behavior and new pipe
statistics for nested
udo directors,
and a number of stability and correctness fixes.
Request body decompression: The new req.do_gunzip VCL variable
decompresses a request body carrying Content-Encoding: gzip as it is
read, allowing VMODs that inspect the request body to see its uncompressed
content. This applies both when cached with std.cache_req_body()
and when sent to the backend. The std.cache_req_body() size limit
applies to the decompressed body size.
import std;
sub vcl_recv {
set req.do_gunzip = true;
std.cache_req_body(1MB);
}
CLI dry-run option (-0): varnishlog, varnishncsa, varnishhist
and varnishtop gained a -0 dry-run option. It validates command line
arguments, VSL queries and varnishncsa format strings, exiting without
daemonizing or connecting to a VSM.
vmod_udo nested retries: .add_backend() gained an exhaust
argument (true/false/auto). When an added backend is itself a UDO
director, setting exhaust = false (or auto, which auto-detects
directors) lets the outer director keep retrying into the nested
director’s remaining healthy backends, instead of giving up on that
branch after a single try.
sub vcl_init {
new root = udo.director(fallback);
root.add_backend(region_a.backend(), exhaust = auto);
root.add_backend(region_b.backend(), exhaust = auto);
}
vmod_udo pipe statistics: vmod_udo directors now record pipe
durations, exposed via
stat as the
varnish_dur_udo_pipe histogram. A new observatory_name constructor
argument lets directors with the same name in different VCLs, for
example one per tenant, keep separate statistics.
vmod_stat duration sums: duration_observatory objects now keep
the sum of registered durations. The new counter argument exposes the
count (.n) and sum (.sum_ms) as Varnish counters in JSON and
Prometheus outputs.
vmod_s3 conditional objects:
s3 director and
signer objects can be created conditionally in vcl_init. Calling a
method on an object that was never created fails the VCL load.
varnishlog-json transaction type: Output now includes a type
field in transaction objects.
The bundled zlib library was updated to 1.3.1.1. This fixes
CVE-2018-25032, where gzip compression of a backend response could
corrupt memory. With the compression strategy Varnish uses, this is
only known to be reachable with gzip_memlevel set to 1; the default
of 8 is not affected.
HTTP/2 DATA frames received on a stream that Varnish has already reset or closed no longer tear down the whole connection, and are now always charged against the connection flow control window. Previously, uploads on a long-lived connection could stall. (VS issue #3342)
Fixed race conditions in vmod_ratelimit that could lead to memory
leaks or crashes during VCL discard, or when reusing idle accounts.
(VS issue #3466)
See the changelog for the complete list of changes.