Скажем, у меня есть страница example.com/location
- теперь я хочу, чтобы содержимое этого URL-адреса было кэшировано, за исключением только одной конкретной HTML-части страницы, которую следует регулярно обновлять. Эта HTML-область не должна попадать в кеш, и вместо этого следует запрашивать серверную часть каждый раз, когда поступает запрос для этой части. Это как-то возможно?
Да, это возможно. Ты после ESI включает.
То есть ваш /location
код должен быть переписан, чтобы разделить кешируемый / не кешируемый материал, например:
<?php
echo 'Hello, I will be cached';
?>
<esi:include src="/your-uncacheable.php"/>
Очевидно, вы поместите логику для создания HTML, который не должен кэшироваться, в /your-uncacheable.php
.
Затем вы включите ESI в VCL:
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
}
}