Varnish symfony esi:标签删除,但没有内容
Varnish symfony esi: tag remove, but no content
所以我的问题是:我有一个很大的 symfony 项目 2.3,varnish 5。所以我想通过 symfony 函数 render_esi() 包含一些片段。毕竟问题我想明白为什么不包含任何文件,甚至只是 test.php。问题是它不包含任何内容,而是标记 esi:include src"..."
我不明白。
好的,让我们看看所有配置:
交响乐:
config.yml
esi:
enabled: true
fragments:
path: /_fragments
some.html.twig:
<h2>Here must be content</h2>
{{ render_esi(url('esi_megamenuBanners')) }}
{{ render_esi(controller("OstrovWebBundle:Frontend/Page:megamenuBanners")) }}
<esi:include src="https://mo.loc/test.php">
<h2>end content</h2>
这是三种不同的方式,我尝试用它来触发 ESI。
清漆配置:
sub vcl_recv {
#Add a Surrogate-Capability header to announce ESI support.
set req.http.Surrogate-Capability = "abc=ESI/1.0";
}
sub vcl_backend_response {
if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
unset beresp.http.Surrogate-Control;
set beresp.do_esi = true;
}
}
我检查了 headers Surrogate-Control 和 Surrogate-Capability - 它们存在。
顺便说一下,我使用 nginx:https -> varnish -> nginx:http:8080 -> symfony 项目。
我花了很多时间做实验,我没有找到任何决定......请告诉我我的错误在哪里?
所以,这是一个答案:ESI 不适用于 https!我只是写 path() 函数而不是 url() 一切都好了!
(我没有找到任何关于 https 和 ESI 的信息,也许我错了;所以要小心...)
其次我不明白 Surrogate-Control 不需要 ESI 子请求,所以我在配置缓存规则时产生了错觉。 Surrogate-Control 不要在子请求中使用。
我掌握的第三点是render_esi(url("someUrl"))和render_esi(controller("someBundle:nameOfController:someAction")): 先make url 你之前在routing中指向的;第二次使用fragments。所以这对缓存规则很有帮助。
所以我的问题是:我有一个很大的 symfony 项目 2.3,varnish 5。所以我想通过 symfony 函数 render_esi() 包含一些片段。毕竟问题我想明白为什么不包含任何文件,甚至只是 test.php。问题是它不包含任何内容,而是标记 esi:include src"..." 我不明白。 好的,让我们看看所有配置:
交响乐: config.yml
esi:
enabled: true
fragments:
path: /_fragments
some.html.twig:
<h2>Here must be content</h2>
{{ render_esi(url('esi_megamenuBanners')) }}
{{ render_esi(controller("OstrovWebBundle:Frontend/Page:megamenuBanners")) }}
<esi:include src="https://mo.loc/test.php">
<h2>end content</h2>
这是三种不同的方式,我尝试用它来触发 ESI。
清漆配置:
sub vcl_recv {
#Add a Surrogate-Capability header to announce ESI support.
set req.http.Surrogate-Capability = "abc=ESI/1.0";
}
sub vcl_backend_response {
if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
unset beresp.http.Surrogate-Control;
set beresp.do_esi = true;
}
}
我检查了 headers Surrogate-Control 和 Surrogate-Capability - 它们存在。
顺便说一下,我使用 nginx:https -> varnish -> nginx:http:8080 -> symfony 项目。
我花了很多时间做实验,我没有找到任何决定......请告诉我我的错误在哪里?
所以,这是一个答案:ESI 不适用于 https!我只是写 path() 函数而不是 url() 一切都好了!
(我没有找到任何关于 https 和 ESI 的信息,也许我错了;所以要小心...)
其次我不明白 Surrogate-Control 不需要 ESI 子请求,所以我在配置缓存规则时产生了错觉。 Surrogate-Control 不要在子请求中使用。
我掌握的第三点是render_esi(url("someUrl"))和render_esi(controller("someBundle:nameOfController:someAction")): 先make url 你之前在routing中指向的;第二次使用fragments。所以这对缓存规则很有帮助。