一页有 5 个 esi:include,每个 src 是一个相同的路径,具有不同的参数,例如 'm.htm?p=1' & 'm.htm?p=2',但我使用了 varnishlog,只看到 1 个 esi 请求发生,所以我不是在多个 esi:include 标记中使用一个相同的路径吗?
问问题
310 次
1 回答
1
Varnish 默认支持每个资源的 n esi:include 指令,以及每个客户端请求最多 5 级 ESI 递归,但这是可配置的。以下是我将采取的调试步骤列表:
- 检查以确保
<esi:include />
从清漆传递给您的客户的响应中没有标签。然后通过直接点击它来确保您的后端生成的<esi:include />
标签与您期望的一样多。只有当它们存在并且清漆没有解析它们时,清漆才是罪魁祸首。确保没有错别字等,例如<es:include .../>
- 从 esi 包含标签直接向您的后端服务器请求 src url。服务器出错了吗?默认行为是忽略 ESI 请求上的错误,我不知道在这种情况下 varnishlog 是否会报告它们。
- 检查为 esi 片段返回的响应标头。如果它们也是可缓存的,varnish 将不会再次从后端请求它们,直到它们过期并且可能不会将它们记录在 varnishlog 中(查看文档)。
- 确保具有不同查询字符串的请求散列到不同的缓存键。如果您的 VCL 试图通过忽略查询字符串来提高命中率,那么您的 ESI 方案将不起作用,因为每个标签在逻辑上都包含相同的缓存资源。
不知道您是否只关心 varnishlog 输出,或者页面本身是否确实存在 esi 故障的症状,这就是我所能召集的。
于 2013-07-16T00:51:10.987 回答