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
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