If you are using varnish to cache the page in PHP and plan to exclude part of the page from being cached or control it then follow the steps below:
Let's assume you want time and date to be excluded from the cache. In this case create a separate php file as below:
// File name: timeDate.php echo 'Accessed at :' . date('d M Y h:i:sa');
esi
tag.<esi:include src="NoVarnishContent/timeDate" /> <!-- Use esi:remove tag to ensure page is still displayed if esi tag is not enabled! --> <esi:remove> <div title="This is cached version:"> <?php include _FILE_ROOT . '/app/views/partials/noVarnishContent/timeDate.php'; ?> </div> </esi:remove>
If you are using varnish above 3.0 then modify vcl_backend_rsponse
as below:
sub vcl_backend_response { # Step 1: Enable ESI( Edge Side Scripting) to esi:include works set beresp.do_esi = true; # Step 2: Once we enable do_esi, we need to set ttl for the path that do not need caching. In this case we use wild card to include all the files that follows after NoVarnishContent if (bereq.url ~ "NoVarnishContent/*") { set beresp.ttl = 0s; # 0s means it won't be cached at all; can set 10s | 1m | 1h and so on } else { // for rest of the page set beresp.ttl = 30m; } }After this, restart the varnish (
sudo service varnish restart
).