Varnish 中的 ESI 内容是否可以被禁止/失效?
Can ESI content be banned / invalidated in varnish?
我有一个内容页面使用 esi:include 标签来包含一个模块,所以假设
/content.html
包含
<esi:include src="/_esi/module.html">
两个 url 都在他们的回复中发送了 cache-conttrol headers。对于 /content.html
这是
Cache-Control: public, max-age=86400
/_esi/module.html 是
Cache-Control:public, max-age=3600
当我加载 /content.html 时,我可以看到我正在从 varnish 获取缓存响应,并且 module.html 标记被适当包含,但是,当我更改 module.html 并禁止时它喜欢:ban req.url == /_esi/module.html
或者即使我扩大禁令范围:ban req.url ~ _esi
我浏览器中的页面仍然没有改变。
我似乎无法在 varnish 文档中找到很多相关信息。我可以明确地使包含的内容(即来自 ESI url 的片段)无效,还是必须等待它过期?
我也尝试实施和使用 PURGE 来实现这一点,但我似乎仍然无法从该包含中获得新鲜内容。
Varnish ESI 将在交付时将页面的最终版本拼接在一起。
如果对象丢失,它会将它所拥有的发送给客户端,然后等待提取完成,然后再继续。如果新获取的对象也是一个 ESI 对象并且有一个包含,这将导致另一个获取等等。包括首先处理深度。
任何包含在 ESI 中的对象都作为缓存中的常规对象存在,并且可以像任何其他对象一样purged/banned/invalidated。
就您所看到的情况而言,我的猜测是您的浏览器缓存有干扰。尝试使用 curl、httpie 或 lwp-request 在命令行上重现它。
我有一个内容页面使用 esi:include 标签来包含一个模块,所以假设
/content.html
包含
<esi:include src="/_esi/module.html">
两个 url 都在他们的回复中发送了 cache-conttrol headers。对于 /content.html 这是
Cache-Control: public, max-age=86400
/_esi/module.html 是
Cache-Control:public, max-age=3600
当我加载 /content.html 时,我可以看到我正在从 varnish 获取缓存响应,并且 module.html 标记被适当包含,但是,当我更改 module.html 并禁止时它喜欢:ban req.url == /_esi/module.html
或者即使我扩大禁令范围:ban req.url ~ _esi
我浏览器中的页面仍然没有改变。
我似乎无法在 varnish 文档中找到很多相关信息。我可以明确地使包含的内容(即来自 ESI url 的片段)无效,还是必须等待它过期?
我也尝试实施和使用 PURGE 来实现这一点,但我似乎仍然无法从该包含中获得新鲜内容。
Varnish ESI 将在交付时将页面的最终版本拼接在一起。
如果对象丢失,它会将它所拥有的发送给客户端,然后等待提取完成,然后再继续。如果新获取的对象也是一个 ESI 对象并且有一个包含,这将导致另一个获取等等。包括首先处理深度。
任何包含在 ESI 中的对象都作为缓存中的常规对象存在,并且可以像任何其他对象一样purged/banned/invalidated。
就您所看到的情况而言,我的猜测是您的浏览器缓存有干扰。尝试使用 curl、httpie 或 lwp-request 在命令行上重现它。