是否可以将 html/js 添加到 varnish 缓存的页面?

是否可以将 html/js 添加到 varnish 缓存的页面?

我有很多网站,想从 Google 获取有关缓存提供的所有页面的分析信息。

是否可以在缓存提供的每个页面的底部添加 javascript 或 html?

例如</body>交换<script>analytics code</script></body>

答案1

您可以mod_ext_filter从 apache 使用:

ExtFilterDefine fixtext mode=output intype=text/html cmd="/bin/sed s/</body>/<analytics code></body>/"

<Location />
    # core directive to cause the fixtext filter to
    # be run on output
   SetOutputFilter fixtext
</Location>

对于清漆,您可以使用 ESI。请参阅:边缘侧包括更多细节。

答案2

简而言之,您不能。Varnish 仅允许您编辑出站标头,而不能编辑出站响应的内容。它确实允许您将 C 代码添加到 vcl 文件,因此您可能能够将某些东西拼凑在一起,但它不是为此设计的。

否则,我会推荐 Mircea 的选项;要么使用 ESI,要么修改 apache 或任何用于注入代码的 Web 服务器。

以防万一,由于您的问题没有说清楚,您不需要让 Varnish 添加 Analytics 监控代码来监控网站,只要该代码在页面上即可。分析代码全部在客户端运行,直接从访问者的浏览器进行调用。

确保配置 varnish 以忽略分析 cookie - 你的后端网络服务器不需要它们,而保留它们将会降低你的命中率 :)

答案3

我编写了一个 VMOD,用于在将响应主体发送给客户端之前修改 Varnish 中的响应主体。使用它需要您自担风险https://github.com/aivarsk/libvmod-rewrite

相关内容