我有以下配置:Symfony2中,上光油和ESI導致奇怪的行爲
varnish (80) <-> nginx (8080) <-> php-fpm (9000)
我光油配置(使用Apache與mod_php的相同行爲):
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-最大生存週期60和具有ESI-包括用於/esiinner
(使用 「普通」 ESI-標籤或樹枝渲染與{'standalone': true}
功能):<esi:include src="/esiinner" />
/esiinner
與S-最大生存週期10
現在(由ESI-包括提取),當我在web/app.php
symfony中啓用應用程序緩存評估ESI標籤,使清漆沒有得到他們,我們有一個Content-Length
標題和內容是不是分塊。如果我禁用AppCache,varnish會評估ESI標籤併發送分塊內容,並且沒有標頭。
爲什麼Varnish發送一個分塊響應並且不會緩衝esi-blocks並將頁面作爲一個整體發送? 如果我正在Symfony-Application的ESI中使用Varnish,我必須使用Symfonys AppCache嗎?
如果您自己沒有解決問題,我希望今天晚些時候有時間進行調查。我至少可以告訴你,你不應該使用AppCache,因爲它基本上是Varnish的替代品。 –