Назад | Перейти на главную страницу

Varnish: Можно ли не кешировать только одну конкретную часть страницы?

Скажем, у меня есть страница 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
    }
}