0

我正在使用 Varnish 而不涉及任何配置(只是将 PORT 转发到 Apache 到 8080)。

但是我有两个问题:

  • 我访问了一个图像的 URL,我删除了图像,然后我再次访问它并且它存在...... Varnish 缓存了它......如果文件至少存在,我如何告诉 varnish 在从他的缓存中提供它之前先查看?

  • PHP 文件没有被缓存(我的意思是 PHP 生成的 HTML 内容)。我总是在标题中看到:年龄:0……有什么线索吗?

谢谢 !

4

1 回答 1

1

我访问了一个图像的 URL,我删除了图像,然后我再次访问它并且它存在...... Varnish 缓存了它......如果文件至少存在,我如何告诉 varnish 在从他的缓存中提供它之前先查看?

嗯,缓存的全部目的不是一遍又一遍地做同样的工作(比如检查存在和加载文件,或生成 PHP 响应),而是重复使用生成的响应。Varnish 对某个文件的存在从不陌生(您的后端服务器进行了数学计算),因此它永远无法检查“文件是否至少存在”。

然而,有一些方法可以指示 varnish 不要永远缓存 url。例如; 如果您的后端响应指示任何缓存不重用结果(某些 HTTP 响应标头表明这一点),varnish 不会缓存它。Varnish 将足够聪明(默认情况下),不会缓存带有 cookie 的响应(这可能会回答你的第二个问题)。您可以告诉 varnish 仅将响应缓存一段时间(例如 30 秒),因此您的删除将很快被拾取。更改/删除文件后,您可以从清漆中清除 url。如果您的后端服务器没有通过它的响应标头正确地说明这一点,您可以通过编写自己的 .vcl 文件来覆盖此行为。

PHP 文件没有被缓存(我的意思是 PHP 生成的 HTML 内容)。我总是在标题中看到:年龄:0……有什么线索吗?

我可以猜到:你在设置 cookie。但是,如果您将响应标头添加到您的问题中,它真的会有所帮助。

于 2011-09-08T21:06:28.273 回答