Google Analytics 说我的某个页面的浏览量约为 200 次,另一个价格比较器说浏览量约为 600 次,而我从 nginx 的日志访问中看到,请求的浏览量为 24 次。
我用:
cat * | grep -c "http://www.mydomain/my-page.html?utm_source=buscape&utm_medium=cpc&utm_campaign=99999999" nginx_access.log
通过此 url 获取请求的数量。
问题是,nginx 是否在日志中保存所有请求? nginx 可能没有注册此 URL 的某些请求?
PS:我使用Varnish缓存
答案1
更新 因为您使用的是 varnish,所以 nginx 既不会看到也不会响应您的所有请求,因此 nginx 无法准确计算页面浏览量。在这种情况下,我通常相信 GA 可以合理地衡量您的流量。如果您想使用 nginx 来验证哪个分析框架的答案更正确,则应关闭 varnish。Varnish 通常不会将日志记录到文件中,因为这会影响性能(它会将日志记录到共享内存段)。但是,如果您确实想将 varnish 日志记录到文件中,则需要使用类似于 varnishcsa。
nginx 将记录所有请求nginx 响应只要您正确配置了访问日志,它就会出现在访问日志中。其他因素(例如)logrotate
可能会影响所有条目是否显示在 access.log 文件中。此外,nginx 前缓存(通过 cloudflare 或 varnish 等)可能会影响 nginx 是否响应请求。
答案2
Nginx 等 Web 服务器会记录每个请求。嵌入到网页中的分析软件依赖于访问者的浏览器来运行相关的 javascript,除非禁用,然后加载通常在<noscript>
标签之间找到的 1 像素跟踪图像。如果浏览器安装了 uBlock Origin 等隐私扩展,则分析可能会被阻止加载。Google Analytics 只能看到浏览器允许其查看的内容。无论浏览器设置如何,您的 Web 服务器都会看到所有传入请求。
只需重新阅读该问题,正如 2ps 所指出的,如果您的 Web 服务器前面有一个缓存层,那么它将看不到这些请求。