不为Wordpress后端处理ESI的清漆

时间:2017-02-28 13:33:35

标签: wordpress varnish esi edge-side-includes

问题: 当通过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;
    }
  }

结果:

  1. 测试php网址按预期工作。即。 http://domain.com/esitest.php
  2. Wordpress网址没有处理esi include。它在esi:remove标记下显示内容。但是ttl显示15分钟,如果标题存在则设置。这意味着它会通过执行esi处理的vcl循环。
  3. 注意:我们使用batcache和memcache存储,Nginx web服务器(禁用gzip)。

0 个答案:

没有答案