2016-12-07 2 views
0

Итак, моя проблема: у меня большой проект symfony 2.3, лак 5. Поэтому я хочу включить некоторый фрагмент с помощью функции symfony render_esi(). После каждой проблемы я хочу понять, почему не содержит никакого файла, даже просто test.php. Проблема в том, что он не содержит никакого контента, но тег esi: include src "..." Я не вижу. Хорошо, давайте посмотрим, все конфиги:Varnish symfony esi: tag удалить, но без содержания

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 ,

Varnish конфигурации:

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

Я проверил оба заголовки суррогаты управления и суррогаты Capability - они существуют.

Кстати, я использую nginx: https -> лак -> nginx: http: 8080 -> проект symfony.

Я трачу много времени на эксперименты, и я не нашел никакого решения ... Скажите, пожалуйста, где моя ошибка?

+0

В вашем файле app.php вы используете AppCache? Если так, попробуйте отключить его. – Carlos

+0

Нет, я не использую его. –

ответ

0

Итак, это ответ: ESI не работает с https! Я просто пишу path() функция вместо url() и все стало хорошо!

(я не нашел никакой информации о HTTPS и ЭСИ, может быть, я неправильно, так что будьте осторожны ...)

Во-вторых, я не понял, что суррогатного-Control не нужно для ESI суб- запросов, поэтому я был в заблуждении при настройке правил кэширования. Surrogate-Controlне использовать в подзапросах.

Третья вещь, которую я понял, отличается от render_esi (URL ("someUrl")) и render_esi (контроллер ("someBundle: nameOfController: SomeAction")): сначала сделать URL, который вы указываете, прежде чем в маршрутизации ; второй использование fragments. Поэтому было бы полезно для правил кэширования.