nginx + AWStats

AWStats 是個很老牌的分析工具,直接對 access log 分析後提供報表,本來以為是完全沒在動的專案,但從版本記錄發現 2020 年與 2023 年各有一版修安全性問題,看起來還是有在維護?

會想到要裝是因為這幾天被砍站,CPU credit balance 低到觸發我設定的 alarm:

除了處理外,也想快速看一下發生什麼事情,而這種砍站的在 JavaScript 類的分析服務上不會看到,需要直接對 server log 分析,所以就想到 AWStats 了...

Ubuntu 可以透過 sudo apt install -y awstats 安裝,裝完以後會看到 /etc/cron.d/awstats 裡面每十分鐘會自己跑一次。

預設的設定目錄在 /etc/awstats 裡面,而且有系統預設的 awstats.conf 與讓使用者蓋過去的 awstats.conf.local,可以避免升級時直接把使用者自己設定的值蓋掉。

最少有幾個要設定需要設,可以參考官方文件「AWStats configuration directives/options」裡面的說明:

LogFile="/var/log/nginx/blog.gslin.org_ssl-access.log"
LogFormat=1
SiteDomain=blog.gslin.org

接下來因為 AWStats 是 CGI script,但 nginx 不直接支援 CGI,所以需要找工具透過 FastCGICGI 程式,在這邊我是用 fcgiwrap 轉,這個軟體可以直接裝:

sudo apt install -y fcgiwrap

網路上翻文件看到也不少人是用 PHP 轉的 (應該是互相 copy & paste),也是個方法...

接下來就是去 document root 下面把 cgi-bin 以及 icon 目錄先接起來:

cd /srv/www.example.com/public
sudo ln -s /usr/share/awstats/icon awstats-icon
sudo mkdir cgi-bin
cd cgi-bin
sudo ln -s /usr/lib/cgi-bin/awstats.pl .

然後是 nginx 這邊的設定,我只放 awstats.pl 給 fcgiwrap:

    location /cgi-bin/awstats.pl {
        include fastcgi.conf;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
    }

另外在意的人可以用 nginx 的 auth_basicauth_basic_user_file 指定帳號密碼,擋外部的存取。

過個十分鐘 (或是半小時,如果 access log 比較多,第一次跑比較慢的話) 就可以直接在 https://www.example.com/cgi-bin/awstats.pl 上看到了。

這報表有種懷舊感...

nginx + fcgiwrap (spawn-fcgi) + Mailgraph

手上還是有固定一台機器是自己架設 Postfix 管理郵件系統,所以還是想跑個 Mailgraph 看一下有多少量在上面跑...

不過因為 Mailgraph 的 web interface 只有 CGI 界面,但 nginx 不支援 CGI,所以需要找個工具透過 nginx 支援的 FastCGI 轉換進去。

概念與設定都不算太難,但是得把工具找齊才會動 (這段花了不少時間),所以記錄一下怎麼做,以後找比較好找資料。

首先先裝 Mailgraph 與 fcgiwrap:

sudo apt install -y fcgiwrap mailgraph

這兩個程式預設都會跑起來。如果沒有的話自己用 sudo service fcgiwrap statussudo service mailgraph status。接下來在 nginx 的找個 virtual host 裡面這樣設:

    location /mailgraph/ {
        index mailgraph.cgi;

        location ~ \.cgi$ {
            include fastcgi.conf;

            fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }
    }

然後把 Mailgraph 的 CGI 與 css 透過 symbolic link 建到 document root 的 mailgraph/ 下:

export DOCUMENT_ROOT="/srv/home.gslin.org"
cd "${DOCUMENT_ROOT}"
sudo mkdir mailgraph
sudo ln -s /usr/lib/cgi-bin/mailgraph.* .

接著重讀設定檔,或是重跑 nginx,就應該可以在 https://virtualhost.com/mailgraph/ 下看到了。