WEBサーバをnginxで運用している人は多いかと思いますが、アクセス解析もちゃんとやりたいところです。Google Analyticsなどのサービスを使ってもよいのですが、ログは採りっぱなしじゃ勿体ないので、ここは王道のawstatsを使うことにします。今回も環境はCentos 6.4 x86_64、nginxはnginxリポジトリからのインストール、awstatsはrpmforgeからインストールしています。
■ nginxのログフォーマットについて
デフォルトのログフォーマットは、 /etc/nginx/nginx.conf でこうなっています。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
Apacheのアクセスログで使われるcombined形式に、http_x_forwarded_forを付け加えた形式となっています。nginxがプロキシの配下にない場合は、最後のフィールドを削っても構わないでしょう。書き方としてはこうなります。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent";
また、ロードバランサやリバースプロキシの配下にある場合は、逆にremote_addr がプロキシサーバのアドレスでしか表示されないので、むしろhttp_x_forwarded_forを1フィールド目にしたほうがよいでしょう。
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
■ アクセス解析用のバーチャルホストを作成する
アクセス解析用のバーチャルホストですが、awstatsがPerlでできているため、こちらを参考に、CGIを動かせるようにしておきます。 他人からはURLでawstats であることを類推されないよう、 http://awstats.example.com/stats/ 配下で動かすこととし、ベーシック認証をかけることにします。いずれもserverディレクティブの中のコンテキストとして書いてあげましょう。
ロケーションは通常のバーチャルホストと同じで構いません。
location / { root /home/vhosts/admin.example.com/public_html; index index.pl index.cgi index.php index.html index.htm; }
次に /stats ですが /var/www/awstats のシンボリックリンク /var/www/stats を作ってから設定を書いてあげます。
[ (っ´∀`)っ@友の会 ~]$ sudo ln -s /var/www/awstats /var/www/stats
location ~ /stats { gzip off; root /var/www; auth_basic "admin only"; auth_basic_user_file /home/vhosts/admin.example.com/.htpasswd; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index awstats.pl; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
あとは拡張子 .pl や .cgi が動くようにしてあげます。
location ~ .pl$ { gzip off; root /home/vhosts/admin.example.com/public_html; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index index.pl; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ .cgi$ { gzip off; root /home/vhosts/admin.example.com/public_html; include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index index.cgi; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
当初、これだけで動かそうとしたのですが、グラフの画像がうまく表示されませんでした。ですので、↑のCGI設定の上に、以下の記述を追加しています。
location /awstatsclasses { alias /var/www/awstats/classes; } location /awstatscss { alias /var/www/awstats/css; } location /awstatsicons { alias /var/www/awstats/icon; }
最後に、ベーシック認証のパスワードファイルを作成し、nginxをリロードすればおしまいです。nginxでベーシック認証を行うには、opensslコマンドを使ってパスワードを暗号化します。
[ (っ´∀`)っ@友の会 ~]$ echo "awstats:$(openssl passwd -apr1 PASSWORD_IS_HERE)" > /home/vhosts/awstats.example.com/.htpasswd
[ (っ´∀`)っ@友の会 ~]$ sudo /etc/init.d/nginx reload
あとはawstats側ですが、ログファイルのPATHやデータディレクトリのPATH、ホスト名などを適宜設定します。以上で、こんな風にawstatsが見れるようになりました。
ね、簡単でしょう?