Matomo - 自架網頁流量分析與繞過阻擋器

前言

談到網頁流量分析,第一個想到的一定是 Google Analytics,非常好用,但同時也有隱私考量,加上部分使用者會使用擋廣告外掛如 AdBlock、uBlock 來阻擋各種廣告與追蹤,使得 Google Analytics 上面的數據沒有那麼準確。

會寫這篇文章,有一部分是因為 Medium 在今年(2020)四月調整了其 SEO,造成不少人的訪問數大幅下降,筆者的訪問數從每月 1 千掉到每月 16…,雖然上面文章不多也沒認真經營,但還是有點小難過。

此篇文章採用 NGINX,筆者環境為 Ubuntu 20.04 與 Raspbian 10(Raspberry Pi 3),在 Firefox、Brave、Safari、Edge 中皆成功繞過追蹤器阻擋,且都是在有另外安裝擋廣告外掛的情況下。

/img/mt/1.png

基本安裝設定

套件安裝

安裝 NGINX 網頁伺服器

sudo apt install nginx

安裝 PHP 與相關套件

sudo apt install php-cli php-fpm php-common php-curl php-gd php-xml php-mbstring php-mysql

安裝 MariaDB 資料庫

sudo apt install mariadb-server

下載 Matomo

cd /var/www
sudo wget https://builds.matomo.org/matomo.zip && sudo unzip matomo.zip
sudo rm matomo.zip
sudo chown -R www-data:www-data /var/www/matomo

設定

NGINX

查看 PHP 版本

php -v

如果顯示 PHP 7.4.3,那就是 7.4


建立 /etc/nginx/sites-available/matomo.conf,並貼上以下內容,並注意:

  1. [example.com](http://example.com) 改成你的域名
  2. php7.4 改成你的版本
server {

  listen [::]:443 ssl http2;
  listen 443 ssl http2;
  listen [::]:80;
  listen 80;

  server_name example.com;
  root /var/www/matomo/;
  index index.php;

  location ~ ^/(index|matomo|piwik|js/index).php {
    include snippets/fastcgi-php.conf;
    fastcgi_param HTTP_PROXY ""; 
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; 
  }
  
  location = /plugins/HeatmapSessionRecording/configs.php {
    include snippets/fastcgi-php.conf;
    fastcgi_param HTTP_PROXY "";
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  }

  location ~* ^.+\.php$ {
    deny all;
    return 403;
  }

  location / {
    try_files $uri $uri/ =404;
  }
  
  location ~ /(config|tmp|core|lang) {
    deny all;
    return 403;
  }

  location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
    allow all;
  }

  location ~ /(libs|vendor|plugins|misc/user) {
    deny all;
    return 403;
  }

}

放入啟用資料夾

cd /etc/nginx/sites-enabled
sudo ln -s ../sites-available/matomo.conf .

檢查設定檔是否有問題

sudo nginx -t

套用設定檔

sudo nginx -s reload

MariaDB

如果是第一次安裝,照此設定,否則可以跳到建立資料庫

套用安全設定:

sudo mysql_secure_installation

依照下面指示設定

Would you like to setup VALIDATE PASSWORD plugin?N
New password:請自行輸入新密碼
Re-enter new password:再輸入一次新密碼
Remove anonymous users? [Y/n]Y
Disallow root login remotely? [Y/n]Y
Remove test database and access to it? [Y/n]Y
Reload privilege tables now? [Y/n]Y

進入到 CLI(Enter 後請輸入密碼)

sudo mysql -u root -p

輸入下面 SQL 指令建立新資料庫

CREATE DATABASE matomo;
GRANT ALL ON matomo.* TO 'matomo' IDENTIFIED BY '請自行輸入新密碼';
FLUSH PRIVILEGES;
exit

造訪網站

設定好域名,第一次造訪時會要求填寫資料庫相關設定,照著填就好。

繞過阻擋器

請尊重使用者隱私,在部分地區未告知使用者即追蹤是違法的!

不理會 DNT

DNT(Do Not Track)為使用者的瀏覽器發出的訊息,告訴伺服器不要追蹤這個連線。

Matomo 預設遵守這項請求,若要停用可到:

  1. Matomo 設定頁面(右上角齒輪)
  2. 左側 [隱私]
  3. 左側 [使用者選擇退出]
  4. 最下面 [支援不追蹤(Do Not Track)設定]
  5. [停用不追蹤]

設定網頁追蹤器

將以下 JavaScript 貼到你的網站(請不要使用 Matomo 原本給的追蹤程式),並且:

  1. *.mysite.tw 改成你的域名
  2. matomo.mysite.tw 改成你的 matomo 網址
  3. setSiteId 改成你 matomo ID
    • 可在 設定(右上角齒輪) > [網站] > [管理] 內看到 ID 數字
<script type="text/javascript">
// matomo
	var _paq = window._paq || [];
	_paq.push(["setRequestMethod", "POST"]);
	_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
	_paq.push(["setCookieDomain", "*.mysite.tw"]);
	_paq.push(["setDomains", ["*.mysite.tw"]]);
	_paq.push(['trackPageView']);
	_paq.push(['enableLinkTracking']);
	_paq.push(['enableHeartBeatTimer']);
	if (document.referrer) {
	    _paq.push(['setReferrerUrl', document.referrer]);
	}
	(function() {
	    var u = "//matomo.mysite.tw/";
	    _paq.push(['setRequestMethod', 'POST']);
	    _paq.push(['setTrackerUrl', u + 'js/']);
	    _paq.push(['setSiteId', '2']);

	    var d = document,
	        g = d.createElement('script'),
	        s = d.getElementsByTagName('script')[0];
	    g.type = 'text/javascript';
	    g.async = true;
	    g.defer = true;
	    g.src = u + 'js/';
	    s.parentNode.insertBefore(g, s);
	})();
</script>

實用功能

  1. 排除自己的 IP
    • 設定 > 網站 > 設定 > 全域排除的 IP 列表
  2. 排除爬蟲、機器人
    • 設定 > 平台 > 市集 > Bot Tracker
  3. 找出 IP 位址相對應精確位置
    • 設定 > 平台 > 市集 > IP 2 Location
  4. 找出使用者從哪邊得知網站
    • 設定 > 平台 > 市集 > Referrers Manager

注意事項

部分擋廣告外掛會擋掉 matomo 相關檔名。

筆者在寫這篇文章時,圖片資料夾命名為 matomo/,結果圖就被 uBlock 擋掉…。

設定 crontab

若太久沒登入頁面查看,有些資料太久沒彙整會造成登入當下 CPU 使用率大幅上升,解法是設定好 crontab:

/etc/cron.d/matomo-archive

MAILTO="[email protected]"
5 * * * * www-data /usr/bin/php /var/www/matomo/console core:archive --url=https://matamo.example.com/

參考文章


comments powered by Disqus