我怎样才能让 Apache 记录来自同一访问且具有相同 ID 的所有请求?

我怎样才能让 Apache 记录来自同一访问且具有相同 ID 的所有请求?

为什么?我目前正在从 Adwords 购买流量到我的电子商务网站。在 Adwords 上,我可以看到有多少访问我已经购买并尝试通过分析 Apache 的 access_log 来验证我的网站的访问次数。

请注意,我确实安装了 Mixpanel,但它报告的数字要低得多。

因此我尝试安装 Apache 的mod_unique_id。我将其添加到我的 access_log 中,并尝试访问我的网站首页(wordpress 页面)。这是日志:

W2P5AswfRANRW1uZBgVINAAAAAA 50.74.231.163 - - [03/Aug/2018:06:41:06 +0000] "GET / HTTP/1.1" 200 15571
W2P5A8wfRANRW1uZBgVINQAAAAE 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/LayerSlider/static/layerslider/css/layerslider.css?ver=6.7.1 HTTP/1.1" 200 3876
W2P5A8wfRANRW1uZBgVINgAAAAM 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/contact-form-7/includes/css/styles.css?ver=5.0.1 HTTP/1.1" 200 656
W2P5A8wfRANRW1uZBgVINwAAADw 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/magnific-popup.css?ver=4.9.5 HTTP/1.1" 200 1816
W2P5A8wfRANRW1uZBgVIOAAAADI 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/animate.css?ver=4.9.5 HTTP/1.1" 200 4348
W2P5A8wfRANRW1uZBgVIOQAAACY 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/css/theme-style.css?ver=4.9.5 HTTP/1.1" 200 3035
W2P5A8wfRANRW1uZBgVIOgAAABI 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/themes/themextend/style.css?ver=4.9.5 HTTP/1.1" 200 2136
W2P5A8wfRANRW1uZBgVIOwAAACQ 50.74.231.163 - - [03/Aug/2018:06:41:07 +0000] "GET /wp-content/plugins/kingcomposer/includes/frontend/vendors/owl-carousel/owl.theme.css?ver=2.6.17 HTTP/1.1" 200 658
W2P5BMwfRANRW1uZBgVIPAAAADE 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/plugins/kingcomposer/includes/frontend/vendors/owl-carousel/owl.carousel.css?ver=2.6.17 HTTP/1.1" 200 528
W2P5BMwfRANRW1uZBgVIPQAAACU 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/slick.css?ver=4.9.5 HTTP/1.1" 200 557
W2P5BMwfRANRW1uZBgVIPgAAAC0 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/owl.carousel.min.css?ver=4.9.5 HTTP/1.1" 200 912
W2P5BJARzZ5ERwnzv6rD5gAAAIs 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/meanmenu.min.css?ver=4.9.5 HTTP/1.1" 200 682
W2P5BNIyikkB8rhsjsyUkQAAAMw 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/theme-default.css?ver=4.9.5 HTTP/1.1" 200 2643
W2P5BISOELTKgpmuElDYuQAAAEI 50.74.231.163 - - [03/Aug/2018:06:41:08 +0000] "GET /wp-content/themes/themextend/css/blog-post.css?ver=4.9.5 HTTP/1.1" 200 4773

如你看到的:

  1. 以上包含的所有内容1 次访问
  2. mod_unique_id 生成一个唯一的 ID每个web 请求。我的首页的 html 包含 > 30 项资产,例如本地托管的 CSS 和图像。
  3. 上述每个请求的时间戳有所不同。
  4. 可能会发生多次访问同时地(IP会有所不同)

我如何配置 Apache 来允许我计算每个访问能否顺利访问我的网站?

答案1

使用客户端跟踪、cookie 等。请记住,大多数 IPv4 地址位于 NAT 后面,因此每个地址可能有多个用户。

httpd 的一个实现是mod_usertrack

如果你全力投入谷歌,你可以得到广告分析

答案2

以下是我编写的一段 PHP 代码,它设置一个带有随机值的 cookie,如果已设置 cookie,则覆盖该 cookie。您可以将其附加到要计为一次单独访问的每个页面的开头(或结尾)(并为其添加扩展名.php)。

<?php
    /*
     * generateRandomString() is used to generate the ID, taken from 
     * https://stackoverflow.com/questions/4356289/php-random-string-generator/4356295#4356295
     */
    function generateRandomString($length = 10) {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
             $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }

// Will generate an ID 12 characters long.
    setcookie("visit", generateRandomString(12));
?>

然后,将条目放入%{visit}C生成的LogFormatID 位置mod_unique_id。这通过在客户端每次访问实际页面时设置带有 ID 的 cookie 来实现,并且该 cookie 将在%{visit}C每次访问时出现在日志中。当我写这个答案时,我打算使用PHP 会话变量但无法找到将其包含在 Apache 日志文件中的方法。


这是我在编写 PHP 脚本之前编写的一个更简单的解决方案,我不想删除它。这个解决方案不能像其他解决方案那样准确地回答您的问题,但您(或其他阅读此内容的人)可能仍然会发现它很有用。

您可以在另一个日志中记录对资产的请求,这样主日志就只有页面访问量(和机器人)。以下代码检查 URL 是否只包含.css.jpg(根据需要添加或删除您自己的扩展)在站点配置的 VirtualHost 部分中:

SetEnvIf Request_URI /.css/ assets
SetEnvIf Request_URI /.jpg/ assets

要记录‘访问’,请env=!assets在您的CustomLog条目后附加:CustomLog /path/to/visit/log <logformat identifier> env=!assets

对于记录资产,如下表所示:CustomLog /path/to/asset/log <logformat identifier> env=assets

相关内容