How to Configure Varnish for Shopware 5

Shopware 5 applications can greatly benefit from Varnish caching. On the client side, pages load faster, while on the server side, the load decreases.

The Hypernode platform supports Varnish as a caching layer and configuration is actually quite simple.

Step One: Enable Varnish on the Hypernode

Varnish can be enabled with a simple command using the hypernode-systemctl CLI:

hypernode-systemctl settings varnish_enabled True

Step Two: Enable Varnish for NGINX Vhost

The hypernode-manage-vhosts (HMV) config allows you to enable varnish for every vhost individually. So if you for example have a domain example.com. You should create 2 vhosts:

hypernode-manage-vhosts example.com www.example.com --type shopware5 --varnish

Step Three: Follow Shopware’s Varnish Configuration Documentation

Please follow Shopware’s documentation about configuring Shopware 5 to work with Varnish. You can skip the step about configuring Varnish, we’ll take you through that :-).

Step Four: Implement Shopware’s Varnish configuration

Copy the VCL configuration from Shopware’s documentation and save it on your Hypernode, for example at /data/web/shopware5.vcl.

Now we can load in the configuration with the following command:

varnishadm vcl.load shopware5_debug /data/web/shopware5.vcl

After that, we can start using the configuration with the following command:

varnishadm vcl.use shopware5_debug

Step Five: Verify the Varnish configuration

Go to your site and open the inspector to check the response headers of your page. You should see the following headers:

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 13 Jan 2022 10:45:18 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: http://appname.hypernode.io/
x-url: /
X-Cacheable: YES
X-Varnish: 35225 67815
Age: 17
Via: 1.1 varnish-v4
Cache-Control: max-age=0, private
X-Cache: HIT
X-Cache-Hits: 1

If your page is not in the cache yet, X-Cache should contain ‘MISS’ and X-Cache-Hits should contain ‘0’. Otherwise, X-Cache should contain ‘HIT’ and X-Cache-Hits should increment each time you visit the page again.

Step Six: Removing verification headers from Varnish configuration

While the X-Cache and X-Cache-Hits headers are very useful, it is a good practice to disable these headers after you don’t need them anymore. You can disable these headers by prefixing the configuration lines with the ‘#’ character, which comments the lines out. The lines in question (from /data/web/shopware5.vcl) are:

# Set a cache header to allow us to inspect the response headers during testing
if (obj.hits > 0) {
    unset resp.http.set-cookie;
    set resp.http.X-Cache = "HIT";
}  else {
    set resp.http.X-Cache = "MISS";
}

set resp.http.X-Cache-Hits = obj.hits;

Make it so that the lines look like the following:

# Set a cache header to allow us to inspect the response headers during testing
if (obj.hits > 0) {
    unset resp.http.set-cookie;
    #set resp.http.X-Cache = "HIT";
}  else {
    #set resp.http.X-Cache = "MISS";
}

#set resp.http.X-Cache-Hits = obj.hits;

Now, we need to reload the varnish configuration again. This can be done by loading it with a slightly different identifier:

varnishadm vcl.load shopware5 /data/web/shopware5.vcl

After that, we can use the new configuration with the following command:

varnishadm vcl.use shopware5

And that should be it! Please verify that your pages do not contain the X-Cache and X-Cache-Hits headers.