使用Nginx日志监控网站访问时间

时间:2018-07-06 08:03:04

标签: nginx analytics access-log

我正在尝试构建一种解决方案,以在不依赖Cookie和第三方的情况下监控我的网站访问。目前,通过监视访问日志,我可以获得足够且有用的信息,但是却错过了访问的时间(即检查人们是否真正阅读了我写的内容)。

用访问日志监视访问时间的好策略是什么? (我正在使用Nginx,但大概相同的想法对Apache也有效)

2 个答案:

答案 0 :(得分:1)

如果还不是构建的一部分,则为Nginx安装Nchan websockets模块。

在Nginx服务器上配置websocket订户位置指令,并在其中指定nchan_subscribe_requestnchan_unsubscribe_request指令。

在页面加载时插入一行代码,以在页面加载时建立到Websocket位置的客户端连接。

就这样,完成了。

现在,当我访问您的页面时,我的浏览器将连接到您的Nginx / Nchan Websocket服务器。 Nginx会向您设置为nchan_subscribe_request URL的任何地址发出内部请求,您可以在此请求的标题中传递我的IP或任何需要识别我的身份。将其记录在您的主日志(一个单独的日志)中,并将其传递到上游服务器,php,节点,创建数据库条目,将我的ip + timestamp保存在memcached中。

然后,当我离开站点时,我的websocket连接将断开,Nginx将执行相同的操作,但是改为使用nchan_unsubscribe_request URL。现在,根据您在连接时所做的事情,您可以做任何事情来确定我在您的网站上花费了多长时间。

由于您现在已经与客户建立了持久的连接,因此可以更进一步,并包括一些代码以监视某些客户端行为或监视某些事件。

您正在尝试确定人们是否正在阅读您写的内容,因此您可以使用几行javascript来监视访问者滚动的页面的深度。每次他们滚动到新的最大滚动位置时,都会通过websocket将这些数据发送回您的服务器。

答案 1 :(得分:0)

由于HTTP的断开特性,您的访问日志可能无法满足您的需求。

对nginx或apache日志不是很熟悉,但是我认为大多数日志都包含时间戳,HTTP请求(请求的文档和状态等)和IP地址。

潜在问题

  1. 没有会话cookie,所有IP地址(同一家庭,同一公司等)将被视为同一会话。
  2. 如果有人访问您的网站(1个HTTP请求),在您的网站上消费了内容,没有进入另一个页面,然后离开,则您的日志将仅包含该请求(实际上是退回,您不会无法计算持续时间)。如果您的应用程序使用了大量的javascript调用,那么您也许可以从服务器端应用程序登录,
  3. 2)如果您使用GA之类的工具,则仍可以使用计时器和javascript事件(例如,尽管不完善),以告知GA会话仍处于活动状态。不确定是否适用于典型的服务器日志。
  4. 如果一次典型访问包含多个请求,则可能不会有太大的问题,但要知道没有简单的方法来获取上次服务器请求后的持续时间。