我分发了一个 PHP 脚本,最近很多人在共享主机帐户上的清漆缓存方面遇到了问题。
这是 PHP 脚本顶部的代码。但是,我仍然在响应标头中收到“Varnish:HIT”(并且脚本无法正常工作)。
header('Pragma: no-cache');
header('Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate, proxy-revalidate');
header('Expires: Tue, 04 Sep 2012 05:32:29 GMT');
一位托管提供商表示,即使通过像上面那样设置缓存标头,也不可能从 PHP 脚本中禁用 varnish。这看起来.. 好吧.. 很傻?但似乎符合我的经验。
那么有没有办法在 PHP 中禁用/跳过 varnish 呢?或者varnish(默认情况下)是否只是忽略PHP设置的这些缓存头?
感谢 Jens-André Koch - 我将在 PHP 脚本中包含清漆指令,以使其忽略无缓存响应:
sub vcl_fetch {
if (beresp.http.cache-control ~ "(no-cache|private)" ||
beresp.http.pragma ~ "no-cache") {
set beresp.ttl = 0s;
}
}
你不能在 PHP 中禁用 Varnish,但是你可以使用一个技巧让 Varnish 忽略当前页面。 Varnish 不会缓存您设置 cookie 的页面,因此每当您希望 Varnish 不缓存某个页面时,您可以编写这段代码:
setcookie('xx', microtime(true), time()+600, '/');
不是最佳解决方案,但效果很好......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)