我使用清漆4,php-fpm 7,nginx,centos 7
我的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"
我的default.vcl:
if (bereq.url ~ "^.*(\/**esi**\/)+.*$") {
set beresp.do_esi = true;
set beresp.ttl = 0s;
} else {
set beresp.ttl = 3600s;
}
我的问题是当我使用通过访问来触发的vcl代码时说出来:http://localhost/lab/varnish
呈现:
<!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没有读取ESI标签内的url src,所以它只是渲染一个空体。
但是当我使用这段代码时:
if (bereq.url ~ "^.*(\/**lab**\/)+.*$") {
set beresp.do_esi = true;
set beresp.ttl = 0s;
} else {
set beresp.ttl = 3600s;
}
Varnish成功呈现ESI标签内的内容,该标签由以下产生: http://localhost/lab/esi/body
如何根据识别ESI“src”标签中的内容使Varnish触发ESI片段渲染?
我已经尝试设置Surrogate-Capability并使用Surrogate-Control进行检查,对我来说,它也不起作用。我的线索已经用完了......
答案 0 :(得分:0)
我认为你不能。
如果将beresp.do_esi设置为true,Varnish将解析后端响应并将每个esi:include标记替换为其源内容。
如果你没有Varnish不解析beresp并按原样提供给客户。
顺便说一下,为什么要部分替换esi标签?