要统计网站的 PV(页面浏览量)、UV(独立访客)和独立IP,可以通过以下几种方法实现:
首先确保 NGINX 配置了详细的访问日志:
http {
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
}
AWK 简单统计
# 统计PV
awk '{print $7}' access.log | wc -l
# 统计独立IP
awk '{print $1}' access.log | sort | uniq | wc -l
GoAccess
# 安装
sudo apt-get install goaccess
# 使用
goaccess /var/log/nginx/access.log --log-format=COMBINED
AWStats
# 安装
sudo apt-get install awstats
# 配置后生成报告
/usr/lib/cgi-bin/awstats.pl -config=yoursite -update
在网页中嵌入统计代码,如:
Google Analytics
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXX-Y"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-XXXXX-Y');
</script>
自建统计系统 使用 JavaScript 发送请求到后端 API 记录访问数据。
ngx_http_stub_status_module
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
访问 /nginx_status
可获取基本统计信息。
ngx_http_status_module (商业版)
-- 示例表结构
CREATE TABLE access_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
ip_address VARCHAR(45),
user_agent TEXT,
page_url VARCHAR(255),
referrer VARCHAR(255),
access_time DATETIME,
user_id VARCHAR(255) NULL,
session_id VARCHAR(255)
);
-- 统计查询
-- PV
SELECT COUNT(*) FROM access_logs WHERE DATE(access_time) = CURDATE();
-- UV (基于session)
SELECT COUNT(DISTINCT session_id) FROM access_logs WHERE DATE(access_time) = CURDATE();
-- 独立IP
SELECT COUNT(DISTINCT ip_address) FROM access_logs WHERE DATE(access_time) = CURDATE();
对于大多数网站,结合 NGINX 日志分析和 JavaScript 统计能提供最全面的数据。