![varnish 缓存不适用于 ajax 调用](https://linux22.com/image/775494/varnish%20%E7%BC%93%E5%AD%98%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%20ajax%20%E8%B0%83%E7%94%A8.png)
if (req.url ~ "do_ajax.php" && req.request == "GET") {
return (lookup);
}
我将此行放在 varnish.vcl 配置中,但是在响应标头中得到了此标头:
no-cache, must-revalidate, max-age=0
我也尝试过:
if (req.url ~ "do_ajax.php" && req.request == "GET") {
return (hash);
}
但是,除非我删除返回(哈希),否则 varnish 无法重新启动。
现在,我想知道 varnish 配置文件中是否有一行强制所有 ajax 调用不接受缓存,第二件我不明白的事情是为什么我在响应标头中得到它,难道不应该是客户端在请求标头中发送它吗?为什么服务器会返回这个?
答案1
正如您在另一篇帖子中提到的那样:您可能正在使用过时的 Varnish 版本。这也许可以解释为什么 VCL 语法不起作用。
请确保你使用的是 Varnish 6 或 Varnish 7。请参阅https://www.varnish-software.com/developers/downloads/#linux-packages根据您所使用的 Linux 发行版查看安装程序列表。
我也在您发表的另一篇文章中提供了 VCL 解决方案。