假设我有页面example.com/location
- 现在我希望缓存该 URL 的内容,但页面中只有特定 HTML 部分除外,该部分应定期更新。此 HTML 区域不应进入缓存,而应在每次收到该部分的请求时查询后端。这样可行吗?
答案1
是的,有可能。你正在ESI 包括。
也就是说,您的/location
代码必须重写以拆分可缓存/不可缓存的内容,例如:
<?php
echo 'Hello, I will be cached';
?>
<esi:include src="/your-uncacheable.php"/>
显然,您会将生成不被缓存的 HTML 的逻辑放入其中/your-uncacheable.php
。
然后您将在 VCL 中启用 ESI:
sub vcl_backend_response {
if (bereq.url == "/location") {
set beresp.do_esi = true; // Do ESI processing
set beresp.ttl = 24 h; // Sets the TTL on the HTML above
} elseif (bereq.url == "/your-uncacheable.php") {
set beresp.ttl = 0m; // Sets zero TTL on
// the included object
}
}