https://github.com/jiangwenyuan/nuster
Nuster est un serveur de cache rapide.
Les spécifications sont susceptibles d'être modifiées, la dernière est donc [https://github.com/jiangwenyuan/nuster/blob/master/README.md](https://github.com/jiangwenyuan/nuster/blob/ Voir master / README.md).
Nuster est un serveur de cache développé basé sur HAProxy et est compatible avec HAProxy. Et vous pouvez définir des règles de cache détaillées à l'aide de l'ACL de HAProxy.
Très tôt
Résultats des tests 3 fois plus que nginx pour un seul cœur, 2 fois plus que nginx pour le multi-cœur et 3 fois plus que le vernis était là.
Cliquez ici pour plus de détails (https://github.com/jiangwenyuan/nuster/wiki/Web-cache-server-performance-benchmark:-nuster-vs-nginx-vs-varnish-vs-squid).
make TARGET=linux2628
make install
Voir HAProxy README (README)
Définissez nuster cache on
dans la section ** global ** et dans les sections ** backend ** et ** listen **
Définir également la règle nuster
syntax: nuster cache on|off [share on|off] [data-size size] [dict-size size] [purge-method method]
default: none
context: global
Décidez si vous souhaitez utiliser le cache.
La taille maximale du cache peut être définie avec ** data-size ** dans les unités «m», «M», «g» et «G».
La valeur par défaut est 1 Mo et le minimum est 1 Mo. Seul le contenu de la réapparition est calculé.
syntax: nuster cache [on|off]
default: on
context: backend, listen
Définissez un filtre de cache. Vous devez également définir cache-rule
.
Il peut être contrôlé indépendamment en allumant et éteignant.
Si vous avez plusieurs filtres, placez le filtre de cache en dernier.
syntax: nuster-rule name [key KEY] [ttl TTL] [code CODE] [if|unless condition]
default: none
context: backend, listen
Définissez une règle de cache. S'il y a plusieurs règles, définissez l'ordre avec soin. Si vous pouvez correspondre, cela s'arrêtera.
acl pathA path /a.html
nuster cache
nuster-rule all ttl 3600
nuster-rule path01 ttl 60 if pathA
path01
n'est pas exécuté car toutes ont mis en cache toutes les demandes
name
Définissez un nom
key KEY
Définissez la clé en vous connectant avec «.» Avec les mots-clés suivants.
NAME
NAME
NAME
La clé par défaut est method.scheme.host.path.query.body
Example
GET http://www.example.com/q?name=X&type=Y
http header:
GET /q?name=X&type=Y HTTP/1.1
Host: www.example.com
ASDF: Z
Cookie: logged_in=yes; user=nuster;
Générez les éléments suivants:
ので、ディフォルトkeyはGEThttpwww.example.com/qname=X&type=Y
で、
key method.scheme.host.path.header_ASDF.cookie_user.param_type
est
GEThttpwww.example.com/qZnusterY
になる。
Si le cache a la même clé que la requête, le cache est renvoyé.
ttl TTL
Définissez une vie. Les unités sont «d», «h», «m» et «s», et la valeur par défaut est «3600» secondes. S'il vaut «0», il n'expirera pas.
code CODE1,CODE2...
La valeur par défaut ne met en cache que 200 réponses, si vous souhaitez mettre en cache autre chose Définir. Dans le cas de «tous», tous sont mis en cache.
nuster-rule only200
nuster-rule 200and404 code 200,404
nuster-rule all code all
if|unless condition
Utilisez HAProxy ACL. See 7. Using ACLs and fetching samples section in HAProxy configuration
Définissez debug
sur global
ou démarrez haproxy
avec -d
.
Les messages concernant le cache incluent «[CACHE]».
ʻSet option http-buffer-request`
Entrez body
pour la clé personnalisée.
Le corps du POST peut être incomplet, donc ** option http-buffer-request ** Voir la section dans [Configuration HAProxy](doc / configuration.txt)
Il peut être préférable d'installer un backend pour POST seul
global
nuster cache on data-size 100m
#daemon
## to debug cache
#debug
defaults
retries 3
option redispatch
timeout client 30s
timeout connect 30s
timeout server 30s
frontend web1
bind *:8080
mode http
acl pathPost path /search
use_backend app1a if pathPost
default_backend app1b
backend app1a
balance roundrobin
# mode must be http
mode http
# http-buffer-request must be enabled to cache post request
option http-buffer-request
acl pathPost path /search
# enable cache for this proxy
nuster cache on
# cache /search for 120 seconds. Only works when POST/PUT
nuster-rule rpost ttl 120 if pathPost
server s1 10.0.0.10:8080
backend app1b
balance roundrobin
mode http
nuster cache on
# cache /a.jpg, not expire
acl pathA path /a.jpg
nuster-rule r1 ttl 0 if pathA
# cache /mypage, key contains cookie[userId], so it will be cached per user
acl pathB path /mypage
nuster-rule r2 key method.scheme.host.path.query.cookie_userId ttl 60 if pathB
# cache /a.html if response's header[cache] is yes
http-request set-var(txn.pathC) path
acl pathC var(txn.pathC) -m str /a.html
acl resHdrCache1 res.hdr(cache) yes
nuster-rule r3 if pathC resHdrCache1
# cache /heavy for 100 seconds if be_conn greater than 10
acl heavypage path /heavy
acl tooFast be_conn ge 100
nuster-rule heavy ttl 100 if heavypage tooFast
# cache all if response's header[asdf] is fdsa
acl resHdrCache2 res.hdr(asdf) fdsa
nuster-rule resCache ttl 0 if resHdrCache1
server s1 10.0.0.10:8080
frontend web2
bind *:8081
mode http
default_backend app2
backend app2
balance roundrobin
mode http
# disable cache on this proxy
nuster cache off
nuster-rule all
server s2 10.0.0.11:8080
listen web3
bind *:8082
mode http
nuster cache
nuster-rule everything
server s3 10.0.0.12:8080