There are VCL-incompatible changes between 2.x and 3.x.
Some release highlights (https://www.varnish-cache.org/):
Introduction of VMODs
Add streaming on pass and miss. This is controlled by the beresp.do_stream boolean. This includes support for compression/uncompression.
Add support for ESI and gzip.
Handle objects larger than 2G.
HTTP Range support is now enabled by default
The ban lurker is enabled by default
if there is a backend or director with the name default, use that as the default backend, otherwise use the first one listed.
Add many more stats counters. Amongst those, add per storage backend stats and per-backend statistics.
Syslog the platform we are running on
The -l (shared memory log file) argument has been changed, please see the varnishd manual for the new syntax.
The -S and -T arguments are now stored in the shmlog
Make it possible to name storage backends. The names have to be unique.
The max_esi_includes parameter has been renamed to max_esi_depth.
The err_ttl parameter has been removed and is replaced by a setting in default.vcl.
Add panic.show and panic.clear CLI commands.
VCL now has vcl_init and vcl_fini functions that are called when a given VCL has been loaded and unloaded.
Varnish is now stricter in enforcing no duplication of probes, backends and ACLs.
The ABI of vmods are now checked. This will require a rebuild of all vmods against the new version of Varnish.
Summary of changes from 2.1.4 to 2.1.5
* Two bugs relating to Content-Length and possible duplication of Content-Length headers have been resolved.
* Support for bourne-like "here"-documents in the command line interface, allowing <<__EOF__ and similar schemes.
* Fixed an issue with re-using connections after Chunked-Encoding.
* Fix a bug that would inflate the "lost header" count and could cause problems during heavy traffic over a single connection, typically seen by load testing.
* Use the time of cache-insertion for "If-Modified-Since" requests if a "Last-Modified" header isn't provided by the backend.
* Merge multi-line Vary and Cache-Control headers from clients, which Google Chromium seem to split up.
* Various build fixes and documentation improvements
* Various bug fixes.
Includes new startup scripts.
Summary of changes from 2.1.3 to 2.1.4
* A bug in the binary heap layout caused inflated object counts, this has been fixed.
* Much more comprehensive documentation.
* A DNS director that uses DNS lookups for choosing which backend to route requests to has been added.
* The client director now uses the variable client.identity for choosing which backend to send a given request to.
* String representation of now, making it easier to add Expires headers
* Portability fixes for Solaris.
* Various bug fixes.
Summary of changes from 2.1.2 to 2.1.3
* The scalability of critbit, the default hashing method, has been improved.
* A bug in varnishd would in some cases confuse varnishncsa leading to lost or wrong log lines.
* Some bugs in the handling of Range requests has been fixed. This only matters if you enable Range support.
* Add «log» command to VCL which will log to the Varnish log.
Summary of changes from 2.1.1 to 2.1.2
* When adding Range support in 2.1.1 an error was introduced. Garbage was appended to some objects. This affected some load balancers - but clients seemed not to be affected.
Summary of changes from 2.1.0 to 2.1.1
* Experimental support for the Range header, must be enabled with the http_range_support parameter.
* A bug in workspace rollback prevented ESI from working correctly in all situations. This is now fixed.
* A race condition and a deadlock in the critbit hasher have been fixed.
* HEAD requests are no longer converted to GET requests for pass and pipe.
* Support for completely obliterating objects including all variants («nuke»). See http://varnish-cache.org/changeset/4668 for details
Summary of changes from 2.0.6 to 2.1.0
Varnish 2.1.0 has just been released. It contains lots of changes relative to 2.0.6, the most important ones being:
* Experimental support for persistent cache
* The regular expression engine is now PCRE
* Saint mode, where we can serve a cached object if the backend is down or otherwise faulty.
* A more scalable hashing method called critbit
* Increased scalability, removing a limitation of maximum 64k connections
* obj_workspace is removed, this is now scaled automatically
* Hashing and client IP based directors
Note: The release has some syntaxchanges in VCL, please read the full changelog
2.0.6:
- Fix off-by-one error in ESI handling
- Bug fixes related to session lingering
- Backend probes should now work correctly with more servers
- Portability fixes
- Make it possible to specify the per-thread stack size, useful for 32 bit
systems
2.0.5:
- Performance improvements, particularly on Linux.
- Implement support for HTTP continuation lines
- Handle illegal responses from the backend better by serving a 503 page
rather than panic-ing
- Add backtrace to assertion errors. This requires Varnish to be installed
unstripped
- Consume less memory when processing ESI
- Better standards compliance with If-None-Match support and emitting more
headers on 304 responses
- Add a FetchError? log tag which makes it easier to understand why a
backend fetch failed.
pkgsrc changes:
- Proper EGDIR/SYSCONFDIR support.
- Default user, directory, ownership and permissions support.
- Rudimentary fix for gcc vs. sunpro on Solaris, as used by varnish
to compile config files.
Varnish is
* a high-performace HTTP accelerator designed for content-heavy
dynamic web sites.
* designed for maximum performance on modern hardware and modern
operating systems. Varnish takes full advantage of modern virtual
memory systems and of advanced operating system features such as
kqueue, accept filters, sendfile etc. where available.
* open source, published under a two-clause BSD license.
From the website:
Varnish is very, very fast - ten to twenty times faster than
Squid on the same hardware.
http://www.varnish-cache.org/