【问题标题】:Varnish Cache will not do ESI includeVarnish Cache 不会做 ESI 包含
【发布时间】:2011-04-01 04:27:13
【问题描述】:

我在获取最简单的 Varnish Cache 时遇到问题 ESI 测试有效。
在尝试和尝试之后,我想我在这里问。

基本上它不会包含 ESI 文件。刚刚回来 HTML 不做它的包含。

这是我的清漆启动命令:

varnishd -f /etc/varnish/default.vcl -s malloc,128M -T 127.0.0.1:2000 -a 0.0.0.0:8080;

这是我正在测试的 URL:

http://vbox.local:8080/varnish-tests/test.php

我的 vcl 规则:

1) default.vcl

backend default {  
.host = "127.0.0.1";  
.port = "80";  
}  

sub vcl_fetch {  

  if (req.url ~ "test.php") {  
      esi;  /* Do ESI processing */  
      set beresp.ttl = 24h;  
  } elseif (req.url ~ "esi_1.php") {  
      set beresp.ttl = 1m;  
  }  
return(deliver);  
}  

我的示例测试 esi 代码

2) 测试.php

<html>  
<head>  

<?php echo "Time 1: ".time(); ?>  

<br />  

The time 2 is: <esi:include src="/varnish-tests/esi_1.php"/> at this very moment.  

</body>  
</html>  

php 到 esi 包含

3) esi_1.php

<?php
echo "Time 2: ".time();  
?>

我已经尝试了上述 vcl 规则的许多变体。
都行不通。只是看不出我哪里出错了?

非常感谢任何建议/帮助。

谢谢。

【问题讨论】:

  • 我正在使用版本 varnish-2.1.5
  • “它不起作用”是什么意思。怎么了?包含没有得到处理吗?标签是否出现在您在浏览器中获得的 HTML 中?它会被什么都取代吗?是否有要检查的错误日志?运行 PHP 的后端服务器是否在其访问日志中获得了正确的条目?
  • 嗨,是的,标签出现在浏览器收到的 HTML 上。它根本没有被替换。 PHP 中没有记录错误。 PHP 访问日志只获得对 test.php 的命中,对 esi_1.php 没有任何影响。
  • 我确实在 varnishlog 中看到了这一点。 11 VCL_error c esi只能从vcl_fetch调用
  • 抱歉,这是一条不正确的错误消息。这是正确的: ESI_xmlerror c No ESI processing, first char not '

标签: php include varnish edge-side-includes


【解决方案1】:

问题是 Varnish 和 mod_deflate 目前不能很好地协同工作。

删除 deflate.conf 和 deflate.load 解决了这个问题。

干杯。

【讨论】:

  • 从 Apache Web 服务器而不是 PHP 中删除了这些。
【解决方案2】:

尝试使用 Varnish 3.0 beta1 进行测试。它的主要新功能之一是完全压缩支持(这意味着它现在也适用于 ESI):

https://www.varnish-software.com/blog/varnish-cache-30-beta-1-out

这样您可能会避免更改 apache/php 压缩处理设置上的任何内容。

【讨论】:

    【解决方案3】:

    鉴于最新的错误,this blog post may be relevant

    似乎某些版本的 Varnish 不能很好地处理 gzip 压缩的内容。您是否设置了 PHP 来执行 gzip 压缩?您是否将托管 PHP 的 Web 服务器软件设置为执行 gzip 压缩?

    Varnish 也可能会扼杀格式不正确的内容,尽管这在这里似乎不太可能......

    很遗憾,我现在没有主意了。

    【讨论】:

      【解决方案4】:

      对于清漆 3.x

      在 vcl_fetch 中,我必须添加:

      set beresp.do_esi = true;
      

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 2011-08-23
        • 2013-08-03
        • 2013-07-14
        • 1970-01-01
        • 2013-10-11
        • 2020-02-01
        • 2015-08-29
        • 1970-01-01
        相关资源
        最近更新 更多