Varnish / VCL大师:如何使用Varnish fetch传递请求体?

时间:2011-09-11 21:01:29

标签: varnish

我担心我对清漆相当新,但我有一个问题,我无法找到任何解决方案(还):Varnish设置为缓存GET请求。我们有一些请求具有如此多的参数,我们决定在请求的主体中传递它们。当我们绕过Varnish但当我们通过Varnish(用于缓存)时,这个工作正常,没有正文就会传递请求,因此Varnish背后的服务失败了。

我知道我们可以使用POST,但我们想要获取数据。我也知道如果我们使用传递模式,Varnish CAN会传递请求体,但据我所知,在传递模式下发出的请求不会被缓存。我已经在网址中添加了一个哈希值,这样当事情有效时,我们实际上会从缓存中获取正确的数据(就url而言,调用会看起来都是相同的)。

现在的问题是“只是”如何重写vcl_fetch以将请求体传递给网络服务器?欢迎任何提示和技巧!

提前致谢

乔恩

2 个答案:

答案 0 :(得分:0)

我不认为你可以,但是,即使你可以,它也是非常危险的:Varnish不会将请求体存储到缓存或哈希表中,所以它将无法看到2个请求之间的任何差异相同的URI和不同的身体。

我没有听说过用于读取请求正文的VCL密钥,但如果存在,则可以将其传递给req.hash以区分请求。

无论如何,请求正文应仅用于POST或PUT ......并且不应缓存POST / PUT请求。

请求正文应该将数据发送到服务器。缓存用于获取数据......

我不知道细节,但我认为你的过程中存在设计问题......

答案 1 :(得分:0)

我不确定我的问题是否正确,但如果您尝试以某种方式与请求体进行交互,则无法使用VCL。您没有任何VCL变量/子例程来执行此操作。

您可以在此处(或在man vcl中)找到VCL中可用的变量列表:

我同意Gauthier的看法,您的系统似乎存在设计问题。

'希望有所帮助。