У меня есть следующая конфигурация:
varnish (80) <-> nginx (8080) <-> php-fpm (9000)
(То же поведение при использовании Apache с mod_php) Моя конфигурация Varnish:
backend default {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
sub vcl_recv {
set req.http.Surrogate-Capability = "abc=ESI/1.0";
}
sub vcl_fetch {
if (beresp.http.Surrogate-Control ~ "ESI/1.0") {
unset beresp.http.Surrogate-Control;
set beresp.do_esi = true;
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT Varnish (" +obj.hits+ ")";
} else {
set resp.http.X-Varnish-Cache = "MISS";
}
}
ESI включен в app/config/config.yml
.В symfony я настроил следующие маршруты:
/esiouter
с s-maxage 60 и включил esi-include для /esiinner
(используя «простой» esi-tag или функцию рендеринга веток с {'standalone': true}
): <esi:include src="/esiinner" />
/esiinner
с s-maxage 10 (извлечено esi-include)
Теперь, когда я включаю AppCache в web/app.php
, Symfony оцениваетТеги ESI, так что лак не получает их, и у нас есть заголовок Content-Length
, а содержимое не разбивается на части.Если я отключаю AppCache, лак оценивает теги ESI и отправляет содержимое по частям, а заголовок Content-Length
отсутствует.
Почему Varnish отправляет ответ по частям и не буферизует блоки esi и не отправляет страницув целом?Если я использую Varnish перед моим Symfony-Application с ESI, должен ли я использовать Symfonys AppCache?