0

所以我的问题:我有一个很大的 symfony 项目 2.3,清漆 5。所以我想通过 symfony 函数 render_esi() 包含一些片段。毕竟问题我想了解为什么不包含任何文件,甚至只是 test.php。问题是它不包含任何内容,但标签 esi:include src"..." 我没有看到。好的,让我们看看所有配置:

Symfony: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;
    }
}

我检查了两个标题Surrogate-ControlSurrogate-Capability - 它们存在。

顺便说一句,我使用 nginx:https -> varnish -> nginx:http:8080 -> symfony 项目。

我花了很多时间进行实验,但我没有找到任何决定......请告诉我我的错误在哪里?

4

1 回答 1

0

所以,这是一个答案:ESI 不适用于 https!我只是写了path()函数而不是url(),一切都变好了!

(我没有找到任何关于 https 和 ESI 的信息,也许我错了;所以要小心...)

其次,我不明白Surrogate-Control不需要 ESI 子请求,所以在配置我的缓存规则时我是在妄想。代理控制 不要在子请求中使用

我掌握的第三件事是render_esi(url("someUrl"))render_esi(controller("someBundle:nameOfController:someAction"))之间的不同:首先制作您在路由中指向的url;第二次使用碎片。所以这对缓存规则很有帮助。

于 2016-12-08T13:37:04.123 回答