清漆symfony esi:标签删除,但没有内容

时间:2016-12-07 15:59:16

标签: symfony varnish esi

所以我的问题:我有一个很大的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-Control Surrogate-Capability - 它们存在。

顺便说一下,我使用的是nginx:https - &gt;清漆 - &gt; nginx:http:8080 - &gt; symfony项目。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

我掌握的第三件事是 render_esi(url(&#34; someUrl&#34;)) render_esi(控制器(&#34; someBundle:nameOfController:someAction&) #34;)):首先制作你在路由中指出的网址;第二次使用fragments。所以它对缓存规则很有帮助。