Varnish:是否可以不缓存页面的某个特定部分?

Varnish:是否可以不缓存页面的某个特定部分?

假设我有页面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
    }
}

相关内容