Turpentine is a full page cache extension for Magento that works with Varnish, a very fast caching reverse-proxy. By default, Varnish doesn't cache requests with cookies and Magento sends the frontend cookie with every request causing a (near) zero hit-rate for Varnish's cache. Turpentine configures Varnish to work with Magento and modifies Magento's behaviour to significantly improve the cache hit rate.
Note that while this extension is now considered stable, it is strongly recommended that it be tested on a development/staging site before deploying on a production site due to the potential need to add custom ESI policies for blocks added by other extensions.
See the Installation and Usage pages.
If you have an issue, please read the FAQ then if you still need help, open a bug report in GitHub's issue tracker.
Please do not use Magento Connect's Reviews or (especially) the Q&A for support. There isn't a way for me to reply to reviews and the Q&A moderation is very slow.
If you have a fix or feature for Turpentine, submit a pull request through GitHub to the devel branch. The master branch is only for stable releases. Please make sure the new code follows the same style and conventions as already written code.
The extension works in two parts, page caching and block (ESI/AJAX) caching. A simplified look at how they work:
For pages, Varnish first checks whether the visitor sent a frontend
cookie.
If they didn't, then Varnish will generate a new session token for them. The page
is then served from cache (or fetched from the backend if it's not already in
the cache), with any blocks with ESI polices filled in via ESI. Note that the
cookie checking is bypassed for clients identified as crawlers (see the
Crawler IP Addresses
and Crawler User Agents
settings).
For blocks, the extension listens for the core_block_abstract_to_html_before
event in Magento. When this event is triggered, the extension looks at the block
attached to it and if an ESI policy
has been defined for the block then the
block's template is replaced with a simple ESI (or AJAX) template that tells Varnish to
pull the block content from a separate URL. Varnish then does another request to
that URL to get the content for that block, which can be cached separately from
the page and may differ between different visitors/clients.
See the Demo Sites wiki page.
If you use Turpentine (on a production site), feel free to add your site to the list!
The code is licensed under GPLv2+, much of the ESI-specific code is taken from Hugues Alary's Magento-Varnish extension, which is licensed as GPLv3.