Varnish is a reverse HTTP proxy, sometimes referred to as a HTTP accelerator or a web accelerator. It stores files or fragments of files in memory, allowing them to be served quickly. It is essentially a key/value store that usually uses the URL as a key. It is designed for modern hardware, modern operating systems and modern workloads.
Varnish is also an open source project, and free software. The development process is public and everyone can submit patches, or just take a peek at the code if there is some uncertainty as to how Varnish works.
Flexibility - The Varnish Configuration Language is lightning fast and allows the administrator to express their wanted policy rather than being constrained by what the Varnish developers want to cater for or could think of.
Performance - While Varnish is designed to reduce contention between threads to a minimum and its performance is really good and usually bound by the speed of the network.
Static file caching. Static Cache optimizes content delivery, speeds up sluggish sites and increases the number of hits a site can handle It can be adjusted for the entire server or per account and it is a good replacement of Nginx static caching. Currently the default cache for all websites is set to 30 minutes (this can be adjusted per client, as well as disabled completely for specific clients).
Dynamic content caching - The Dynamic Cache purpose is to cache all resources on your site even if they are dynamically generated. For example, if you have a Joomla/Wordpress website, your images and other multimedia will be static but your articles will be stored in the application database. Dynamic content caching is disabled by default on the servers, and can be adjusted per domain/client account.
Abilities for Varnish to rate limit requests to specific URLs (this is on a global level) - Rate limiting is used to control the rate of traffic sent or received by a network interface controller For example, WordPress login brute force, or Joomla Administrator brute force can be avoided with rate limit requests.
HTTP Gun feature. It can be used per domain/URL basis as a client end feature, which allows for high traffic URLs to be cached for long periods of time (e.g. 1 hour). This feature can be used where there is a detected abusive activity and/or server load caused by malicious activity on specific websites.
Full support for streaming objects through from the backend on a cache miss. Bytes will be sent from 1 to n number of requesting clients as they come in from the backend server.
Background (re)fetch of expired objects. On a cache miss where a stale copy is available, serve the client the stale copy while fetching an updated copy from the backend in the background.
New Varnish log query language, allowing automatic grouping of requests when debugging ESI or a failed backend request. (among much more)
Comprehensive request timestamp and byte counters.
Security improvements including disabling of run-time changes to security sensitive parameters.