首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清漆ESI不工作

清漆ESI不工作
EN

Server Fault用户
提问于 2013-09-01 11:53:08
回答 2查看 3.2K关注 0票数 0

我的配置如下:- nginx端口80 -清漆(3.0.4)端口6081 - apache端口8080

Nginx接收请求并将其传递给Varnish,后者检查缓存,然后从缓存返回响应,或者将请求传递给Apache。在Apache中,我禁用了mod_deflate,因此输出没有压缩。我为所有这样的请求启用了ESI:

代码语言:javascript
复制
sub vcl_fetch {
    set beresp.do_esi = true;
}

我的测试文件(test.php)如下所示:

代码语言:javascript
复制
Current time is: <esi:include src="/date.php" /> 

date.php:

代码语言:javascript
复制
<?php
echo date('H:i:s');

但是Varnish是对esi包括的处理。在varnishlog中,我得到了以下错误:

代码语言:javascript
复制
11 ESI_xmlerror c No ESI processing, first char not '<'

来自test.php的响应头:

代码语言:javascript
复制
Accept-Ranges:bytes
Age:3
Connection:keep-alive
Content-Length:51
Content-Type:text/html
Date:Sun, 01 Sep 2013 11:51:57 GMT
Server:nginx
Surrogate-Control:"ESI/1.0"
Via:1.1 varnish
X-Powered-By:PHP/5.4.15-1~precise+1
X-Varnish:1236304062 1236304061

以及html输出:

代码语言:javascript
复制
Current time is: <esi:include src="/name.php" /> 

所以你可以看到ESI没有被处理。

我做错了什么?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2013-09-01 13:34:20

解决了它..。如果服务器响应的第一个字符不是"<“,则ESI将无法工作。我的问题的解决方案是将测试文件包装成标准的HTML结构,这样看起来如下所示:

代码语言:javascript
复制
<html>
<head>
    <title></title>
</head>
<body>
Current time is: <esi:include src="/name.php" /> 
</body>
</html>
票数 3
EN

Server Fault用户

发布于 2013-09-01 23:08:34

另一种方法是使用参数运行Varnish守护进程:

代码语言:javascript
复制
-p esi_syntax 0x3

这意味着

代码语言:javascript
复制
0x00000001 - Don't check if it looks like XML
0x00000002 - Ignore non-esi elements
票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/535436

复制
相关文章

相似问题

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