首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不处理ESI的清漆包括

不处理ESI的清漆包括
EN

Stack Overflow用户
提问于 2012-04-10 15:56:02
回答 4查看 7.8K关注 0票数 1

我正在尝试在本地环境中设置Varnish来处理ESI包含。

我在虚拟机中运行清漆,内容在主机上运行。

我有两个文件"index.html“和"test.html”。它们都存储在apache服务器docroot中的一个名为"esi“的文件夹中。

index.html

代码语言:javascript
复制
<h1>It Works!</h1>
<esi:include src="test.html" /> 

test.html

代码语言:javascript
复制
<p>ESI HAS BEEN INCLUDED</p>

清漆在端口8000上的虚拟机上运行。所以我在这里访问它:http://192.168.56.101:8000/esi/

在虚拟机上的/etc/varnish/default.vcl中,我将下面的配置添加到文件的底部:

代码语言:javascript
复制
sub vcl_fetch {
   set beresp.do_esi = true; /* Do ESI processing               */
   set beresp.ttl = 24 h;    /* Sets the TTL on the HTML above  */
}

它应该对所有请求进行ESI处理的想法(不要在意它的不良实践是否只是为了让这个东西正常工作:)

加载http://192.168.56.101:8000/esi/的结果是:

代码语言:javascript
复制
<h1>It Works!</h1>
<esi:include src="test.html" />

即。ESI显示在标记中,它没有被处理。

我已经检查了清漆日志,但是里面没有错误,也没有任何与环境相关的地方。

有人能看到我做错了什么吗?如果需要更多的信息,请告诉我。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-21 19:54:56

如果您的esi包含src为"test.html“,那么清漆将将该请求发送到默认后端,即127.0.0.1。我相信您需要为您的远程服务器配置第二个后端。就像这样:

代码语言:javascript
复制
backend default {
    .host = "127.0.0.1";
    .port = "8000";
}

backend hostmachine {
    .host = "50.18.104.129"; # Enter your IP address here
    .port = "80";
}

然后,在您的子vcl_recv中,您需要将包含/esi/的通信量重定向到远程服务器。

代码语言:javascript
复制
sub vcl_recv {
      if (req.url ~ "^/esi/") {
            set req.backend = hostmachine;
            set req.http.host = "www.correctdomainname.com";
      } else {
            set req.backend = default;
      }
}

我现在正在做同样的事情,所以试一试,让我知道它是否适合你。

票数 1
EN

Stack Overflow用户

发布于 2014-08-21 08:49:28

对于ESI works (清漆3.x),第一个字符必须是"<“,所以只需添加HTML结构

在这里我的测试:

index.php

代码语言:javascript
复制
<html>
<head>
    <title></title>
</head>
<body>
<?php

    $now = new \DateTime('now');
    echo "hello world from index.php ".$now->format('Y-m-d H:i:s');
?>

<br/>

<esi:include src="/date.php"/>

<br/>

<esi:remove>
    ESI NOT AVAILABLE
</esi:remove>

<br/>

<!--esi
ESI AVAILABLE !!

-->
</body>
</html>

date.php

代码语言:javascript
复制
<?php
$now = new \DateTime('now');
echo "hello world from date.php ".$now->format('Y-m-d H:i:s');

输出:

代码语言:javascript
复制
hello world from index.php 2014-08-21 10:45:29
hello world from date.php 2014-08-21 10:46:35
票数 2
EN

Stack Overflow用户

发布于 2014-04-25 19:26:18

清漆只实现了ESI的一小部分。截至2.1,三个ESI声明:

代码语言:javascript
复制
    esi:include
    esi:remove
    <!--esi ...-->

基于变量和cookie的内容替换没有实现,而是在路线图上。清漆不会处理HTML注释中的ESI指令。要使ESI工作,需要在VCL中激活ESI处理,如下所示:

代码语言:javascript
复制
sub vcl_fetch {
if (req.url == "/index.html") {
   set beresp.do_esi = true; /* Do ESI processing               */
   set beresp.ttl = 24 h;    /* Sets the TTL on the HTML above  */
} elseif (req.url == "/test.html") {
   set beresp.ttl = 1m;      /* Sets a one minute TTL on        */
                             /*  the included object            */
}

}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10092146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档