给自己的网站做访客统计:IP、地理、设备一个不少

目录

第三方统计(百度统计、Google Analytics)把数据都留在别人那里。自建一套轻量追踪,数据完全归自己。

原理

追踪 = 服务端捕获 + 客户端上报,双通道互补:

  • 服务端:每次请求都能拿到 IP 和全部 HTTP 头,即使用户禁用 JS 也逃不掉
  • 客户端:浏览器里能拿到屏幕分辨率、GPU 型号、时区、Canvas 指纹等更细的信息

服务端要点

Flask 里提取真实 IP 要穿透代理链:

def get_client_ip(request):
    # 优先取代理链头
    fwd = request.headers.get("X-Forwarded-For", "")
    if fwd:
        return fwd.split(",")[0].strip()
    return request.remote_addr

拿到 IP 后用 ip-api.com 免费接口定位国家、城市、经纬度。

客户端要点

// 一个 fetch 就把数据发回去
fetch("/collect", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
        screenWidth: screen.width,
        timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
        canvasFingerprint: getCanvasHash(),
        // ...更多字段
    }),
    keepalive: true
});

数据存哪

SQLite 就够了,单文件无运维成本。数据量大了再平滑迁移 PostgreSQL。

别忘了合规

采集访客信息前,务必在网站加隐私政策,说明收集了哪些数据、用来做什么。这是底线。