HTTP Caching¶
The performance of web sites and applications can be significantly improved by reusing previously fetched resources. Web caches reduce latency and network traffic and thus lessen the time needed to display a representation of a resource. By making use of HTTP caching, Web sites become more responsive.
HTTP Cache Middleware¶
Traefik Enterprise's HTTP Cache Middleware allows you to add caching to your routers and improve the performance of your infrastructure. The cache middleware follows the RFC 7234.
Cache Status¶
Unless configured not to, the middleware also adds a cache status header (X-Cache-Status
) to responses, to indicate whether the request did HIT
, MISS
or BYPASS
the cache.
HIT
: The response was fetched from the cache, and the request did not reach the upstream applicationMISS
: The response was fetched from the upstream application and not from the cacheBYPASS
: The request or response did not allow HTTP caching
Middleware Options¶
maxTtl
¶
Required, Default=300
Set the maxTtl
option to the maximum amount of seconds after which you want cached HTTP responses to expire and be invalidated. The time after which an HTTP response is no longer cached will be the lowest value between what is configured in maxTtl
and the specified expiry time in the HTTP response headers.
For example, if a response has an Expires
header set to expire after 10 minutes but the middleware is configured with a maxTtl
of 5 minutes, the response will only be cached for 5 minutes.
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=300"
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-http-cache
spec:
plugin:
httpCache:
maxTtl: 300
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=300"
"labels": {
"traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl": 300
}
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=300"
http:
middlewares:
test-http-cache:
plugin:
httpCache:
maxTtl: 300
[http.middlewares]
[http.middlewares.test-http-cache.plugin.httpCache]
maxTtl = 300
disableCacheStatusHeader
¶
Optional, Default=false
The disableCacheStatusHeader
option prevents the middleware from adding a X-Cache-Status
header to responses. See the section on cache status for more information on this header.
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.disableCacheStatusHeader=true"
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-http-cache
spec:
plugin:
httpCache:
disableCacheStatusHeader: true
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.disableCacheStatusHeader=true"
"labels": {
"traefik.http.middlewares.test-http-cache.plugin.httpCache.disableCacheStatusHeader": "true"
}
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.disableCacheStatusHeader=true"
http:
middlewares:
test-http-cache:
plugin:
httpCache:
disableCacheStatusHeader: true
[http.middlewares]
[http.middlewares.test-http-cache.plugin.httpCache]
disableCacheStatusHeader = true
maxStale
¶
Optional, Default=0
The maxStale
option allows the middleware to serve stale responses when allowed by the request's cache-control directive max-stale
. It controls the duration in seconds a stale cached entry is kept in cache and served.
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxStale=30"
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-http-cache
spec:
plugin:
httpCache:
maxStale: 30
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxStale=30"
"labels": {
"traefik.http.middlewares.test-http-cache.plugin.httpCache.maxStale": "30"
}
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxStale=30"
http:
middlewares:
test-http-cache:
plugin:
httpCache:
maxStale: 30
[http.middlewares]
[http.middlewares.test-http-cache.plugin.httpCache]
maxStale = 30
Cache Storages¶
At the moment, Traefik Enterprise only provides the in-memory store option.
Memory¶
The memory storage stores the cache content in the proxy memory. It is efficient and requires very little configuration. However, with this storage each proxy maintains its own cache and does not share it with other proxy instances. Also, it has to be noted that the memory limit is set per middleware and is not global to the proxy. In other words, if you have multiple middlewares with differents memory limits, they will add-up, but if you share the same middleware accros multiple routers they will use the same limit.
memory.limit
¶
Optional, Default="1Gi"
The memory.limit
option specifies the maximum amount of memory that the cache can use for storing HTTP responses.
Its value is measured in bytes, and can be expressed as a plain integer or as a fixed-point integer using one of
these suffixes: E
, P
, T
, G
, M
, K
. You can also use the power-of-two equivalents: Ei
, Pi
, Ti
, Gi
, Mi
, Ki
.
Measure | Unit | Exponent | Bytes | Unit | Exponent | Bytes |
---|---|---|---|---|---|---|
kilo- | K |
10^3 |
1000 |
Ki |
1024 |
1024 |
mega- | M |
10^6 |
100 000 |
Mi |
1024^2 |
1 048 576 |
giga- | G |
10^9 |
100 000 000 |
Gi |
1024^3 |
1 073 741 824 |
tera- | T |
10^12 |
100 000 000 000 |
Ti |
1024^4 |
1 099 511 627 776 |
peta- | P |
10^15 |
100 000 000 000 |
Pi |
1024^5 |
1 125 899 906 842 624 |
exa- | E |
10^18 |
100 000 000 000 000 |
Ei |
1024^6 |
1 152 921 504 606 846 976 |
Do not exceed the proxy memory limits
The value given to memory.limit
should remain within the bounds of each proxy's specified memory limit. By default, Traefik Enterprise proxies have a limit of 4 gigabytes of memory on many platforms, but this can be customized by modifying the generated installation manifests (see the section Installing/Customizing
for more information).
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-http-cache
spec:
plugin:
httpCache:
memory:
limit: "3Gi"
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
"labels": {
"traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit": "3Gi"
}
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
http:
middlewares:
test-http-cache:
plugin:
httpCache:
memory:
limit: "3Gi"
[http.middlewares]
[http.middlewares.test-http-cache.plugin.httpCache.memory]
limit = "3Gi"
Advanced Configuration Example¶
Below is an advanced configuration that enables the memory cache store, sets its size limit to 3Gi and also assigns a maximum TTL of 600 seconds to cached entries.
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=600"
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-http-cache
spec:
plugin:
httpCache:
maxTtl: 600
memory:
limit: "3Gi"
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=600"
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
"labels": {
"traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl": "600",
"traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit": "3Gi",
}
labels:
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.maxTtl=600"
- "traefik.http.middlewares.test-http-cache.plugin.httpCache.memory.limit=3Gi"
http:
middlewares:
test-http-cache:
plugin:
httpCache:
maxTtl: 600
memory:
limit: "3Gi"
[http.middlewares]
[http.middlewares.test-http-cache.plugin.httpCache]
maxTtl = 600
[http.middlewares.test-http-cache.plugin.httpCache.memory]
limit = "3Gi"
Purging the Cache¶
The cache can be purged with teectl
using the delete cache
command. Specific middleware caches can be purged using the --names
flag, which accepts a comma separated list of middleware names. Alternatively all caches can be purged using the --all
flag.
Example:
teectl delete cache --names="cache-middleware1@kubernetescrd,cache-middleware-2@traefikee"
teectl delete cache --all
Namespaced resources
Middleware names must be suffixed by the provider name they are defined in.