HAProxy Enterprise Documentation 2.2r1

Caching

Caching lets you offload work from your application servers by returning cached resources directly from HAProxy Enterprise. It can be applied to any reusable content that is safe to be shared among multiple clients, such as:

  • CSS, Javascript and icon files

  • API responses (e.g. JSON) that do not contain client-specific data

  • Small, static HTML pages

The cache runs in memory and does not store state on disk. This makes it very fast, but not durable past a reload of the load balancer. We recommend storing objects for a short duration, such as less than a minute to reduce the chance of serving stale content.

Enable the cache

  1. Add a cache section to your configuration.

    cache mycache
       total-max-size 4
       max-object-size 10000
       max-age 240

    Directive

    Description

    total-max-size

    Sets the total memory the cache can consume in megabytes. The maximum value is 4095.

    max-object-size

    Sets the max size in bytes for a single object; Larger objects will not be stored. It cannot be larger than half of total-max-size.

    max-age

    Sets the seconds for an object to stay the cache; It can be overriden with a Cache-Control header.

  2. Add an http-request cache-use and an http-response cache-store directive to a frontend or listen section to enable caching in that section. The filter line is required only when the section includes other filter lines, but otherwise can be omitted, since it is implicitly defined.

    frontend  fe_main
       bind :80
       filter cache mycache
       http-request cache-use mycache
       http-response cache-store mycache
       default_backend be_main

    Directive

    Description

    http-request cache-use

    Fetches the requested resource from the cache. Place an if or unless statement afterwards to include or exclude a resource from being cached.

    http-response cache-store

    Saves the resource to the cache once it comes from the server.

Cache restrictions

Objects are cached only if all of the following are true:

  • The size of the resource does not exceed max-object-size

  • The response from the server is 200 OK

  • The response does not have a Vary header

  • The response does not have a Cache-Control: no-cache header


Next up

Client IP preservation