一台服务器两套缓存(Varnish Cache)
Two sets of cache with one server (Varnish Cache)
是否可以使用两个独立的缓存存储来设置 Varnish Cache?
然后基于 http 自定义 header 使用 cache1 或 cache2。
例如:
- 请求 1 带有 header (store=Cache1) 这应该转到 Cache1
存储在 Varnish 缓存中
- 请求 2 与请求 1 完全一样,但带有 header (store=Cache2),这应该转到 Varnish 缓存上的 Cache2 存储
当后端根据 header(但使用相同的 url)以不同的 body 响应时,就会出现此用例 - 一个合法的用例。
您可以完全按照分区 Varnish 缓存的描述来处理这个问题,类似于 putting Varnish static files cache separately。
但你想要的其实要简单得多。您的特殊情况应该可以通过调整 VCL 轻松解决。您只需要告诉 Varnish 缓存应该根据特定的 header 而不同。所以在你的 VCL 中,你会指定:
sub vcl_hash {
if (req.http.store) {
hash_data(req.http.store);
}
}
vcl_hash
指定缓存应根据 store
HTTP header 的值而有所不同。
是否可以使用两个独立的缓存存储来设置 Varnish Cache?
然后基于 http 自定义 header 使用 cache1 或 cache2。
例如:
- 请求 1 带有 header (store=Cache1) 这应该转到 Cache1 存储在 Varnish 缓存中
- 请求 2 与请求 1 完全一样,但带有 header (store=Cache2),这应该转到 Varnish 缓存上的 Cache2 存储
当后端根据 header(但使用相同的 url)以不同的 body 响应时,就会出现此用例 - 一个合法的用例。
您可以完全按照分区 Varnish 缓存的描述来处理这个问题,类似于 putting Varnish static files cache separately。
但你想要的其实要简单得多。您的特殊情况应该可以通过调整 VCL 轻松解决。您只需要告诉 Varnish 缓存应该根据特定的 header 而不同。所以在你的 VCL 中,你会指定:
sub vcl_hash {
if (req.http.store) {
hash_data(req.http.store);
}
}
vcl_hash
指定缓存应根据 store
HTTP header 的值而有所不同。