如果您的应用程序放在清漆前面,您如何进行日志记录

how do you do logging if your app is put in front of varnish

varnish 背后的逻辑是它永远不会触及您的 ruby/php 代码库并直接由缓存提供服务。如果我有一个电子商务网站,并且对于每个类别页面,我想在什么时间记录由 user/ip 地址 X 查看的特定页面,我已将此记录代码放入我的 php 代码中。然而,当我 运行 使用 Varnish 的应用程序时,我就失去了所有这些能力。我对网关代理缓存还很陌生,谁能教教我?

解决这个问题最简单最有效的方法是创建一个只执行日志记录部分的 ajax 请求。这样您仍然可以缓存整个页面,而您禁用 ajax 请求的缓存以使其能够记录所有用户。您将从 varnish 转发到 ajax 请求(使用 X-Forwarded-For)的 IP,您可以使用 javascript 轻松获得的 URL 并包含在 ajax 调用中(浏览器推荐 headers 不可靠)。

一个相当简单的事情是写一个脚本来解析varnish日志,并检索感兴趣的页面、ips和其他有趣的信息。可以 运行 一天一次或更频繁,具体取决于您的需要。

通过在@Clarence 响应中使用 ajax 请求,您有可能不包括未激活 javascript 的访客(但您可以实时获得统计数据)

您可以向 Varnish 添加一些逻辑来转发 IP 地址,这样您就可以获得完整的客户端 IP 网络服务器日志并请求 URL。

此示例适用于 apache:Varnish Client IP not logging in Apache Logs

[编辑]以上建议仅适用于缓存未命中。客户端 JS 推荐。

您也可以考虑使用 javascript 来轮询服务器的信息,例如 Google Analytics。 http://www.google.com/analytics/