我使用清漆 4、php-fpm 7、nginx、centos 7
我的清漆参数:
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"
我的默认.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,所以它只是渲染一个空的 body。
但是当我使用这段代码时:
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生成
如何使 Varnish 基于识别 ESI“src”标签中的内容来触发 ESI 片段渲染?
我已经尝试设置 Surrogate-Capability 并使用 Surrogate-Control 检查,对我来说它也不起作用。我没头绪了。。