我有很多网站,想从 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