Varnish not processing ESI includes

cowls picture cowls · Apr 10, 2012 · Viewed 7.5k times · Source

I'm trying to setup Varnish to process ESI includes on a local environment.

I am running varnish in a virtual machine and the content is running on the host machine.

I have two files "index.html" and "test.html". These are both stored in a folder called "esi" in the docroot of an apache server.

index.html

<h1>It Works!</h1>
<esi:include src="test.html" /> 

test.html

<p>ESI HAS BEEN INCLUDED</p>

Varnish is running on the virtual machine on port 8000. So I access it here: http://192.168.56.101:8000/esi/

in /etc/varnish/default.vcl on the virtual machine I have added the followin config to the bottom of the file:

sub vcl_fetch {
   set beresp.do_esi = true; /* Do ESI processing               */
   set beresp.ttl = 24 h;    /* Sets the TTL on the HTML above  */
}

With the idea that it should process ESI on ALL requests (Dont care if its bad practice just trying to get this thing to work :))

The result when I load http://192.168.56.101:8000/esi/ is:

<h1>It Works!</h1>
<esi:include src="test.html" />

ie. the ESI is shown in the markup, it is not being processed.

I have checked the Varnish log, however there are no errors in there and nothing related to ESIs.

Can anyone see what I am doing wrong here? Let me know if more information is needed.. thanks

Answer

bastien picture bastien · Aug 21, 2014

For ESI works (varnish 3.x), the first char must be a "<" so simply add HTML structure

Here my test :

index.php

<html>
<head>
    <title></title>
</head>
<body>
<?php

    $now = new \DateTime('now');
    echo "hello world from index.php ".$now->format('Y-m-d H:i:s');
?>

<br/>

<esi:include src="/date.php"/>

<br/>

<esi:remove>
    ESI NOT AVAILABLE
</esi:remove>

<br/>

<!--esi
ESI AVAILABLE !!

-->
</body>
</html>

date.php

<?php
$now = new \DateTime('now');
echo "hello world from date.php ".$now->format('Y-m-d H:i:s');

Output :

hello world from index.php 2014-08-21 10:45:29
hello world from date.php 2014-08-21 10:46:35