I use varnish 4, php-fpm 7, nginx, centos 7
My varnish.params:
DAEMON_OPTS="-a :80 -T 127.0.0.1:6082
-f /etc/varnish/default.vcl
-S /etc/varnish/secret
-s malloc,1g
-p feature=+esi_disable_xml_check,+esi_ignore_other_elements
-p cli_buffer=16384
-p vcc_allow_inline_c=on"
My default.vcl:
if (bereq.url ~ "^.*(\/**esi**\/)+.*$") {
set beresp.do_esi = true;
set beresp.ttl = 0s;
} else {
set beresp.ttl = 3600s;
}
My problem is when i use that vcl code which is triggered by accessing say it: http://localhost/lab/varnish
Which render:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<esi:include src="http://localhost/lab/esi/body"/>
</body>
</html>
Varnish is not reading the url src inside the ESI tag, so it's just rendering an empty body.
But when i use this code:
if (bereq.url ~ "^.*(\/**lab**\/)+.*$") {
set beresp.do_esi = true;
set beresp.ttl = 0s;
} else {
set beresp.ttl = 3600s;
}
Varnish successfully render the content inside ESI tag which is produced by: http://localhost/lab/esi/body
How to make Varnish trigger the ESI fragment render based on recognizing what is in ESI "src" tag?
I've tried setting Surrogate-Capability and checking with Surrogate-Control, it's not working either, for me. I'm running out of clue..