我在我的一个站点上注意到一个问题,在该站点上,我的内容页面(不应设置任何cookie,都应返回具有最大使用期限的“Cache-Control:public”,并且不需要授权)。
我的问题是HitPass对象以某种方式将其放入我的缓存中,从而从该页面中删除了缓存。我需要调试它,但是对于如何最好地做到这一点感到困惑,特别是因为我无法复制问题。
我注意到 Varnish 在 Varnish 日志中的HitPass旁边给了我一个ID。我假设这是生成HitPass的请求的 Varnish ID,并且回溯到 Varnish 日志中会告诉我响应到底出了什么问题?
从我要缓存的页面中删除SetCookie header 会更好吗?问题是,即使传递了URL,也会调用vcl_fetch。是否有任何方法可以在vcl_fetch中判断vcl_recv是否传递了当前请求?
最佳答案
SetCookie 确实是您在缓存中获得命中传递对象的原因。这是对非准备站点的重要优化。一次命中将让 varnish 直接到达这些请求的后端,而不是拖延它们并等待前一个请求的响应。
我不确定您到底要调试什么。如果它是 set-cookie,您可能应该从后端删除它,或者制定自己的规则来缓存哪些内容或在缓存中忽略哪些内容。如果您仍然需要 set-cookie 并且它具有唯一值,那么命中传递是最好的方法。
关于 Varnish HitPass调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865945/