mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
DOC: cache: configuration and management
This commit is contained in:
parent
75df9d7a7a
commit
86d0df0b66
@ -108,6 +108,7 @@ Summary
|
|||||||
9.2. HTTP compression
|
9.2. HTTP compression
|
||||||
9.3. Stream Processing Offload Engine (SPOE)
|
9.3. Stream Processing Offload Engine (SPOE)
|
||||||
|
|
||||||
|
10. Cache
|
||||||
|
|
||||||
1. Quick reminder about HTTP
|
1. Quick reminder about HTTP
|
||||||
----------------------------
|
----------------------------
|
||||||
@ -3877,7 +3878,8 @@ http-request { allow | auth [realm <realm>] | redirect <rule> | reject |
|
|||||||
sc-inc-gpc0(<sc-id>) |
|
sc-inc-gpc0(<sc-id>) |
|
||||||
sc-set-gpt0(<sc-id>) <int> |
|
sc-set-gpt0(<sc-id>) <int> |
|
||||||
silent-drop |
|
silent-drop |
|
||||||
send-spoe-group
|
send-spoe-group |
|
||||||
|
cache-use
|
||||||
}
|
}
|
||||||
[ { if | unless } <condition> ]
|
[ { if | unless } <condition> ]
|
||||||
Access control for Layer 7 requests
|
Access control for Layer 7 requests
|
||||||
@ -4112,6 +4114,9 @@ http-request { allow | auth [realm <realm>] | redirect <rule> | reject |
|
|||||||
If the slot <id> doesn't exist, then HAProxy fails parsing the
|
If the slot <id> doesn't exist, then HAProxy fails parsing the
|
||||||
configuration to prevent unexpected behavior at run time.
|
configuration to prevent unexpected behavior at run time.
|
||||||
|
|
||||||
|
- cache-use <name> :
|
||||||
|
See section 10.2 about cache setup.
|
||||||
|
|
||||||
- { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
|
- { track-sc0 | track-sc1 | track-sc2 } <key> [table <table>] :
|
||||||
enables tracking of sticky counters from current request. These rules
|
enables tracking of sticky counters from current request. These rules
|
||||||
do not stop evaluation and do not change default action. Three sets of
|
do not stop evaluation and do not change default action. Three sets of
|
||||||
@ -4373,7 +4378,8 @@ http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
|
|||||||
sc-inc-gpc0(<sc-id>) |
|
sc-inc-gpc0(<sc-id>) |
|
||||||
sc-set-gpt0(<sc-id>) <int> |
|
sc-set-gpt0(<sc-id>) <int> |
|
||||||
silent-drop |
|
silent-drop |
|
||||||
send-spoe-group
|
send-spoe-group |
|
||||||
|
cache-store
|
||||||
}
|
}
|
||||||
[ { if | unless } <condition> ]
|
[ { if | unless } <condition> ]
|
||||||
Access control for Layer 7 responses
|
Access control for Layer 7 responses
|
||||||
@ -4550,6 +4556,9 @@ http-response { allow | deny | add-header <name> <fmt> | set-nice <nice> |
|
|||||||
If the slot <id> doesn't exist, then HAProxy fails parsing the
|
If the slot <id> doesn't exist, then HAProxy fails parsing the
|
||||||
configuration to prevent unexpected behavior at run time.
|
configuration to prevent unexpected behavior at run time.
|
||||||
|
|
||||||
|
- cache-store <name> :
|
||||||
|
See section 10.2 about cache setup.
|
||||||
|
|
||||||
- "redirect" : this performs an HTTP redirection based on a redirect rule.
|
- "redirect" : this performs an HTTP redirection based on a redirect rule.
|
||||||
This supports a format string similarly to "http-request redirect" rules,
|
This supports a format string similarly to "http-request redirect" rules,
|
||||||
with the exception that only the "location" type of redirect is possible
|
with the exception that only the "location" type of redirect is possible
|
||||||
@ -16938,6 +16947,101 @@ Important note:
|
|||||||
The SPOE filter is highly experimental for now and was not heavily
|
The SPOE filter is highly experimental for now and was not heavily
|
||||||
tested. It is really not production ready. So use it carefully.
|
tested. It is really not production ready. So use it carefully.
|
||||||
|
|
||||||
|
10. Cache
|
||||||
|
---------
|
||||||
|
|
||||||
|
HAProxy provides a cache, which was designed to perform cache on small objects
|
||||||
|
(favicon, css...). This is a minimalist low-maintenance cache which runs in
|
||||||
|
RAM.
|
||||||
|
|
||||||
|
The cache is based on a memory which is shared between processes and threads,
|
||||||
|
this memory is splitted in blocks of 1k.
|
||||||
|
|
||||||
|
If an object is not used anymore, it can be deleted to store a new object
|
||||||
|
independently of its expiration date. The oldest objects are deleted first
|
||||||
|
when we try to allocate a new one.
|
||||||
|
|
||||||
|
The cache use a hash of the host header and the URI as the key.
|
||||||
|
|
||||||
|
It's possible to view the status of a cache using the Unix socket command
|
||||||
|
"show cache" consult section 9.3 "Unix Socket commands" of Management Guide
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
When an object is delivered from the cache, the server name in the log is
|
||||||
|
replaced by "<CACHE>".
|
||||||
|
|
||||||
|
10.1 Limitation
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The cache won't store and won't deliver objects in these cases:
|
||||||
|
|
||||||
|
- If the response is not a 200
|
||||||
|
- If the response contains a Vary header
|
||||||
|
- If the response does not contain a Content-Length header or if the
|
||||||
|
Content-Length + the headers size is greater than a buffer size - the
|
||||||
|
reserve.
|
||||||
|
- If the response is not cacheable
|
||||||
|
|
||||||
|
- If the request is not a GET
|
||||||
|
- If the HTTP version of the request is smaller than 1.1
|
||||||
|
|
||||||
|
Caution!: Due to the current limitation of the filters, it is not recommended
|
||||||
|
to use the cache with other filters. Using them can cause undefined behavior
|
||||||
|
if they modify the response (compression for exemple).
|
||||||
|
|
||||||
|
10.2 Setup
|
||||||
|
----------
|
||||||
|
|
||||||
|
To setup a cache, you must define a cache section and use it in a proxy with
|
||||||
|
the corresponding http-request and response actions.
|
||||||
|
|
||||||
|
10.2.1 Cache section
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
cache <name>
|
||||||
|
Declare a cache section, allocate a shared cache memory named <name>, the
|
||||||
|
size of cache is mandatory.
|
||||||
|
|
||||||
|
total-max-size <megabytes>
|
||||||
|
Define the size in RAM of the cache in megabytes. this size is splitted in
|
||||||
|
blocks of 1kb which are used by the cache entries.
|
||||||
|
|
||||||
|
max-age <seconds>
|
||||||
|
Define the maximum expiration duration. The expiration is set has the lowest
|
||||||
|
value between the s-maxage or max-age (in this order) directive in the
|
||||||
|
Cache-Control response header and this value. The default value is 60
|
||||||
|
seconds, which means that you can't cache an object more than 60 seconds by
|
||||||
|
default.
|
||||||
|
|
||||||
|
10.2.2 Proxy section
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
http-request cache-use <name>
|
||||||
|
Try to deliver a cached object from the cache <name>. This directive is also
|
||||||
|
mandatory to store the cache as it calculates the cache hash. If you want to
|
||||||
|
use a condition for both storage and delivering that's a good idea to put it
|
||||||
|
after this one.
|
||||||
|
|
||||||
|
http-response cache-store <name>
|
||||||
|
Store an http-response within the cache. The storage of the response headers
|
||||||
|
is done at this step, which means you can use others http-response actions
|
||||||
|
to modify headers before or after the storage of the response. This action
|
||||||
|
is responsible for the setup of the cache storage filter.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
backend bck1
|
||||||
|
mode http
|
||||||
|
|
||||||
|
http-request cache-use foobar
|
||||||
|
http-response cache-store foobar
|
||||||
|
server srv1 127.0.0.1:80
|
||||||
|
|
||||||
|
cache foobar
|
||||||
|
total-max-size 4
|
||||||
|
max-age 240
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Local variables:
|
* Local variables:
|
||||||
* fill-column: 79
|
* fill-column: 79
|
||||||
|
@ -1754,6 +1754,28 @@ show cli sockets
|
|||||||
127.0.0.2:9969 user 2
|
127.0.0.2:9969 user 2
|
||||||
[::1]:9999 operator 2
|
[::1]:9999 operator 2
|
||||||
|
|
||||||
|
show cache
|
||||||
|
List the configurated caches and the objects stored in each cache tree.
|
||||||
|
|
||||||
|
$ echo 'show cache' | socat stdio /tmp/sock1
|
||||||
|
0x7f6ac6c5b03a: foobar (shctx:0x7f6ac6c5b000, available blocks:3918)
|
||||||
|
1 2 3 4
|
||||||
|
|
||||||
|
1. pointer to the cache structure
|
||||||
|
2. cache name
|
||||||
|
3. pointer to the mmap area (shctx)
|
||||||
|
4. number of blocks available for reuse in the shctx
|
||||||
|
|
||||||
|
0x7f6ac6c5b4cc hash:286881868 size:39114 (39 blocks), refcount:9, expire:237
|
||||||
|
1 2 3 4 5 6
|
||||||
|
|
||||||
|
1. pointer to the cache entry
|
||||||
|
2. first 32 bits of the hash
|
||||||
|
3. size of the object in bytes
|
||||||
|
4. number of blocks used for the object
|
||||||
|
5. number of transactions using the entry
|
||||||
|
6. expiration time, can be negative if already expired
|
||||||
|
|
||||||
show env [<name>]
|
show env [<name>]
|
||||||
Dump one or all environment variables known by the process. Without any
|
Dump one or all environment variables known by the process. Without any
|
||||||
argument, all variables are dumped. With an argument, only the specified
|
argument, all variables are dumped. With an argument, only the specified
|
||||||
|
Loading…
x
Reference in New Issue
Block a user