如何指示varish根据响应头数据生成缓存密钥



我需要根据从后端收到的响应标头而不是根据客户端请求的URL来生成/存储缓存密钥。

这样做的主要原因是:如果请求的东西不可用,我有一个后端逻辑来用一些不同的数据回复客户端。

例如:请求:example.com/foo/102030?names=test1现在,我的后端检查是否存在102030的test1,如果不存在,则检查102030是否有一个特殊标签=Y:基本上告诉必须查找其他匹配对象。

因此,在这种情况下,会再次向客户端备份带有数据的回复,这些数据可以通过example.com/foo/000000?names=test1.访问

所以,现在的问题是,如果example.com/foo/000000?names=test1附带了其他请求,varnish会根据URL将其视为不同的请求,但实际上,我需要使用example.com/foo/0000000提供缓存中已经存在的相同数据?names=test1.

目前,我在后台使用一些regex语法来执行Ban,因此在这种情况下,我可以很容易地使用/foo/000000?names=test1而不是另一个存储的对象无效。

那么,有没有一种方法可以根据响应标头信息存储缓存密钥?

不幸的是,您无法做到这一点。只有请求信息才能用于创建缓存密钥。

这是经过设计的,因为传入请求只有它们自己的请求属性,它们可以向Varnish提供以标识它们想要检索的资源。

最新更新