问题: 当通过Wordpress调用URL时,似乎Varnish(版本3.0)无法处理esi。
背景: 想法是缓存文章页面或任何静态页面(Wordpres站点)更长的持续时间,但对于某些动态小部件。为实现这一目标,我们设置了一个php页面,它将通过single.php和header.php生成侧边栏和菜单页面。这些还包括名为“Set-Esi'。
的标题。”如果检测到存在标头,则Varnish将处理ESI。
试验: 我们在网站的根目录中添加了一个php页面。让我们说' esitest.php'。在这个页面中,我们有标题,调用小部件菜单和回显日期时间以进行测试。
PHP测试页Code
Varnish VCL(在vcl_fetch,ver 3.0下):
if (req.http.host ~ "(dev.|beta.|beta1.)domain.com$") {
## Perform ESI TTL setting:
if (beresp.http.Set-Esi){
set beresp.do_esi = true;
set beresp.ttl = 15m;
}
else if (req.url ~ "(esisidebar.php|esimenu.php|esimorefromcategory.php)") {
set beresp.ttl = 3s;
}
else if (req.url ~ "^/wp-admin/admin-ajax.php") {
set beresp.ttl = 3m;
}
else {
set beresp.ttl = 5m; unset beresp.http.expires; unset req.http.Cookie;
}
}
结果:
http://domain.com/esitest.php
esi:remove
标记下显示内容。但是ttl显示15分钟,如果标题存在则设置。这意味着它会通过执行esi处理的vcl循环。注意:我们使用batcache和memcache存储,Nginx web服务器(禁用gzip)。