如何在Linux Web服务器上快速跟踪PDF访问

2020年12月30日10:53:18 发表评论 31 次浏览

是否可以跟踪你的网站用户单击多少次以下载二进制文件(如PDF或JPG)?对的, 这是可能的。这简单吗?我最初并不这么认为。我错了。

故事开始于我优化自己的目标网页时Bootstrap IT网站对于我的新书, 与时俱进:你无法错过的所有重大技术趋势的背景知识.

我想提供对本书样本章节的PDF文件的访问。但是我也想通过某种方式知道实际下载了多少人。

现在让我们退后一步。谷歌分析是一项免费服务, 它使用插入HTML文件中的代码段来收集和显示有关文件访问频率的数据。

Google Analytics(分析)的神奇之处(也是问题)在于可以显示多少有关用户的信息。我在Keeping Up一书中讨论了与服务有关的一些隐私问题。我还提到我自己在自己的网站上使用该服务至少感到内。

无论如何, 就其本身而言, Google Analytics(分析)无法告诉你很多有关如何使用基于Web的PDF的信息。当然, 有解决这个问题的技巧。

传统方法包括设置Google跟踪代码管理器, 自定义你使用的请求网址的语法, 或者, 如果你的网站使用WordPress软件, 则使用Monster Insights插件。这些方法都可以使用, 但是需要相当陡峭的学习曲线。

但是我是Linux系统管理员。而且, 由于我始终不忘提醒周围的人, 所以最好的系统管理员是懒惰的。学习曲线?这听起来像是工作。不会在我的手表上发生。

所以这是交易。我的Web服务器显然运行Linux。而且, 在后台, HTTP流量由Apache处理。这意味着Apache网站将记录我网站上发生的所有事情。

一切。仅需在本地工作站上运行一行Bash, 就可以告诉我有关PDF示例章节的最新内容:

echo "cd /var/log/apache2 && grep -nr KeepingUpSampleChapter" \
   | ssh -i PrivateKey.pem LoginName@bootstrap-it.com

让我们分解一下。两个命令中的第一个用引号引起来(cd / var / log / apache2)会将我们移至Linux服务器上的/ var / log / apache2 /目录, Apache将在其中写入其日志。那不是火箭科学。

该目录中将有多个感兴趣的文件。那是因为与常规访问和错误相关的消息被保存到不同的文件中, 并且由于文件轮换策略意味着这些文件中的任何一个也可能有多个版本。所以我会用grep在所有未压缩的文件中搜索KeepingUpSampleChapter串。KeepingUpSampleChapter当然是PDF文件名的一部分。

然后, 我将该命令通过管道传输到SSH, SSH将连接到我的远程服务器并执行该命令。这是一次成功运行后的单个条目的样子(出于隐私考虑, 我删除了请求者的IP地址):

other_vhosts_access.log.1:12200:bootstrap-it.com:443 <requester's IP Address> - - [01/Dec/2020:16:39:36 -0500] "GET /davidclinton/KeepingUpSampleChapter.pdf?pdf=SamplePDF HTTP/1.1" 200 65146 "https://bootstrap-it.com/davidclinton/keeping-up/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"

我们可以看到:

  • 条目出现的日志文件(other_vhosts_access.log.1)
  • 请求者的IP地址(已编辑)
  • 时间戳告诉我们访问文件的确切时间
  • 文件在服务器文件系统上的相对位置(/davidclinton/KeepingUpSampleChapter.pdf)
  • 发出请求的网址(https://bootstrap-it.com/davidclinton/keeping-up/)
  • 用户正在运行的浏览器

那是很多信息。如果我们只是好奇有多少次文件已下载, 我们可以简单地将输出通过管道传输到wc该命令将告诉我们有关输出的三件事:输出的行数, 单词数和字符数。该命令如下所示:

echo "cd /var/log/apache2 && grep -nr KeepingUpSampleChapter | wc" \
   | ssh -i PrivateKey.pem LoginName@bootstrap-it.com

这种方法有一个可能的局限性。如果你的网站很忙, 日志文件将频繁滚动, 通常一天不止一次。默认情况下, 第一次滚动后, 将使用gz算法, 无法读取grep.

的zgrep命令在处理此类文件时不会有任何麻烦, 但是该过程可能会花费很长时间。你可能会考虑编写一个简单的自定义脚本来解压缩每个脚本gz文件, 然后定期运行grep反对其内容。那将是你的项目。

我可以通过书籍, 课程和文章的形式获得更多的管理优势bootstrap-it.com.

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: