我的情况是:缓存已启用,正在进行查找,但没有缓存命中。
这是我的配置:
cache cache-foo
total-max-size 32
max-object-size 1024
max-age 120
backend foo_backend
http-request cache-use cache-foo if { path_beg /api/ }
server app1 10.116.0.1:80 check
server app2 10.116.0.2:80 check
server app3 10.116.0.3:80 check
http-response cache-store cache-foo
我通过数据平面启用了缓存。我可以通过连接套接字并运行来检查缓存是否正在运行show cache
:
show cache
0x7f100f50a03a: cache-foo (shctx:0x7f100f50a000, available blocks:32768)
运行后show stats
我可以看到大约有 50 个“缓存查找”,但是有 0 个“缓存命中”。
我假设由于我正在进行查找,因此正在搜索缓存数据,但不知何故缓存并未被填充。
这可能是因为定义中的语句顺序造成的吗backend
?如果是这样,有没有办法通过 dataplane-api 来更改它们?
答案1
HAProxy 会遵守后端在Cache-Control
标头中发回的内容。在我的例子中,max-age
发送了 0,这导致 HAProxy 跳过缓存。
将该值更改为大于 0 的值将允许 HAProxy 的缓存工作。并且该值将优先于 haproxy.cfg 中指定的值。
您可以检查响应是否由缓存提供,因为age
返回了 的标头。