使用GoAccess分析网站流量

对于小型vps而言,传统的统计插件(比如 WP-Statistics)往往过于臃肿,而我们想要一个酷酷的分析页面可以供后台查询。

本文将分享如何利用 GoAccess 这款极简的日志分析工具,配合 Caddy 服务器MaxMind 城市 IP 库,在 VPS 上从零搭建一套全自动、纯原生的中文可视化流量看板。

一、 安装 GoAccess

我最终选择GoAccess,他非常适合对于小型网站进行日志分析。下面是GoAccess的官方安装方法:

# 1. 导入 GoAccess 官方签名密钥
wget -O - [https://deb.goaccess.io/gnugpg.key](https://deb.goaccess.io/gnugpg.key) | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null

# 2. 添加官方软件源
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg] [https://deb.goaccess.io/](https://deb.goaccess.io/) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list

# 3. 更新索引并安装工具
sudo apt update
sudo apt install goaccess -y

二、 配置 MaxMind 动态 IP 城市库

GoAccess 识别访客地理位置依赖本地的 .mmdb 数据库。而MaxMind提供给我们ip城市分析,我们使用官方提供的 geoipupdate 工具来实现自动化维护。

sudo apt install geoipupdate

1. 完善配置文件

修改 /etc/GeoIP.conf,填入你在 MaxMind 官网申请的免费凭证,你应该在key里区添加新的。

AccountID YOUR_ACCOUNT_ID
LicenseKey YOUR_LICENSE_KEY
EditionIDs GeoLite2-City ... 根据你的需要

2. 首次下载

sudo geoipupdate

注:系统默认会将数据库下载至 /var/lib/GeoIP/GeoLite2-City.mmdb。你也可以通过上面语句添加-v显示详细信息

三、 调整 Caddy 信任代理

如果网站套了 Cloudflare 等 CDN 高防,Caddy 默认在日志里记录的会是 CDN 节点的 IP,这会导致 GoAccess 的地理位置分析全部失效(全显示为洛杉矶或未知机房)。

1. 注入全局信任块

打开 /etc/caddy/Caddyfile,在文件最顶部(第一行)加入以下配置,强制 Caddy 识别 Cloudflare 的真实客体 IP:

{
    servers {
        trusted_proxies static 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22
    }
}

2. 配置站点日志输出

在你的域名配置块内加入日志输出规则:

blog.yourdomain.com {
    ...
    log {
        output file /var/log/caddy/blog.log {
            roll_size 10mb
            roll_keep 10
        }
    }
}

保存后,运行 caddy reload 重载服务。

四、 权限隔离与首次手动渲染

为了确保安全,我们将最终生成的 HTML 报表存放在专门的隐藏目录中,并理顺权限,让 WordPress 的 PHP 进程有权读取。

# 创建存放最终报告的目录
sudo mkdir -p /var/www/secure-logs
sudo chown -R $USER:www-data /var/www/secure-logs
chmod 755 /var/www/secure-logs

# 手动生成首次中文报表
LANG=zh_CN.UTF-8 goaccess /var/log/caddy/blog.log \
  -o /var/www/secure-logs/report.html \
  --log-format=CADDY \
  --geoip-database=/var/lib/GeoIP/GeoLite2-City.mmdb

五、 Cron 定时任务

为了让数据保持最新,同时避免高频刷新拖累性能,我们设置每 10 分钟增量刷新一次报表,且每月自动更新一次 IP 库。

执行 crontab -e,在最底部写入:

# 1. 每月 1 号凌晨 3 点,全自动更新一次 MaxMind 城市 IP 数据库
0 3 1 * * /usr/bin/geoipupdate

# 2. 每 10 分钟,自动注入中文环境,精简读取日志并刷新
*/10 * * * * export LANG=zh_CN.UTF-8; /usr/bin/goaccess /var/log/caddy/blog.log -o /var/www/secure-logs/report.html --log-format=CADDY --geoip-database=/var/lib/GeoIP/GeoLite2-City.mmdb --no-global-config

注:读者可以使用 --ignore-panel 参数主动砍掉了诸如 404 错误、静态资源请求、来源页面等平时不常看的板块,提升了阅读体验。

六、 WordPress 配置

由于报表存放在 /var/www/secure-logs/report.html,该路径并未暴露在公网上。我们可以在 WordPress 的当前主题目录下新建一个自定义页面模板(如 page-goaccess.php),利用 PHP 看门狗机制实现后端越权读取:

<?php
/* Template Name: GoAccess Analytics Dashboard */

// 只有管理员有权查看流量大屏
if (!current_user_can('manage_options')) {
    wp_die('Unauthorized access.');
}

$report_path = '/var/www/secure-logs/report.html';

if (file_exists($report_path)) {
    echo file_get_contents($report_path);
} else {
    wp_die('Analytics report not generated yet.');
}

最后,在 WordPress 后台新建一个常规页面,页面属性中的“模板”选择 GoAccess Analytics Dashboard,发布即可。

七、WordPress 菜单

如果你想要在菜单里添加只有管理员能看到的指向页面的链接,你可以安装Nav Menu Roles插件,它可以设置具体的权限。



📢 转载须知



本文作者:Tianci Hou


本文标题:《使用GoAccess分析网站流量》


本文链接:https://blog.tiancihou.me/use-goaccess-to-analyze-website-traffic/




CC BY-NC-SA


版权声明:本文采用 CC BY-NC-SA 4.0 许可协议。转载请务必保留以上署名及原始链接。



暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇