AWStats è un’applicazione che permette di generare statistiche relative agli accessi ai siti ospitati sul proprio server.
In questa guida vediamo come installare e configurare AWStats per l’utilizzo su un server web Nginx.
Il presupposto è quindi che sul server sia già installato Nginx, per i dettagli relativi all’installazione di Nginx rimandiamo all’articolo pubblicato in passato.
La prima cosa da fare è quindi installare awstats, per completare questa operazione su un server Debian, basta eseguire il seguente comando.
sudo apt-get install awstats
Durante la fase di installazione viene chiesto se si vuole utilizzare la configurazione automatica per apache e lighttpd, non bisogna selezionare questa opzione visto che non si usano questi server web.
L’accesso all’applicazione AWStats viene fatto all’indirizzo /cgi-bin/awstats.pl, risulta quindi necessario creare uno script php a cui vengono inoltrate le richieste attraverso php-cgi.
sudo nano /etc/nginx/cgi-bin.php
<?php
$descriptorspec = array(
0 => array(“pipe”, “r”), // stdin is a pipe that the child will read from
1 => array(“pipe”, “w”), // stdout is a pipe that the child will write to
2 => array(“pipe”, “w”) // stderr is a file to write to
);
$newenv = $_ENV;
$newenv[“SCRIPT_FILENAME”] = $_ENV[“X_SCRIPT_FILENAME”];
$newenv[“SCRIPT_NAME”] = $_ENV[“X_SCRIPT_NAME”];
if (is_executable($_ENV[“X_SCRIPT_FILENAME”])) {
$process = proc_open($_ENV[“X_SCRIPT_FILENAME”], $descriptorspec, $pipes, NULL, $newenv);
if (is_resource($process)) {
fclose($pipes[0]);
$head = fgets($pipes[1]);
while (strcmp($head, “n”)) {
header($head);
$head = fgets($pipes[1]);
}
fpassthru($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
$return_value = proc_close($process);
}
else {
header(“Status: 500 Internal Server Error”);
echo(“Internal Server Error”);
}
}
else {
header(“Status: 404 Page Not Found”);
echo(“Page Not Found”);
}
?>
L’operazione successiva consiste nel modificare il formato dei log di Nginx, bisogna infatti utilizzare lo stesso formato dei log di Apache per permettere a Awstats di leggerli.
sudo nano /etc/nginx/nginx.conf
Trovare la seguente riga all’interno dei file.
include /etc/nginx/conf/mime.types;
Inserire la seguente riga sotto quella indicata in precedenza.
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
A questo punto è necessario configurare tutti i domini in modo che venga utilizzato awstats.
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.domain.com.conf
sudo nano /etc/awstats/awstats.domain.com.conf
All’interno del file è necessario modificare le seguenti righe in base alle impostazioni del dominio.
LogFile=”/home/user_name/public_html/domain.com/logs/access.log”
LogFormat=1
SiteDomain=”domain.com”
HostAliases=”www.domain.com localhost 127.0.0.1″
Salvare il file e eseguire AWStats per la generazione iniziale delle statistiche.
sudo /usr/lib/cgi-bin/awstats.pl -config=domain.com -update
Programmare l’esecuzione di AWStats con Cron in modo che le statistiche vengano generate ogni dieci minuti.
sudo crontab -e
*/10 * * * * /usr/lib/cgi-bin/awstats.pl -config=domain.com -update > /dev/null 2>&1
L’ultima operazione da eseguire consiste nel modificare il file di configurazione di Nginx e inserire il redirect cgi-bin in modo da inoltrare le richieste allo script creato in precedenza.
sudo nano /etc/nginx/sites-available/domain.com
Trovare la seguente riga.
location ~ .php$ {
Inserire le seguenti righe prima di quella indicata in precedenza.
location ^~ /awstats-icon {
alias /usr/share/awstats/icon/;
access_log off;
}
location ^~ /awstatscss {
alias /usr/share/doc/awstats/examples/css/;
access_log off;
}
location ^~ /awstatsclasses {
alias /usr/share/doc/awstats/examples/classes/;
access_log off;
}
# Configure /cgi-bin/scripts to go through php-fastcgi
location ~ ^/cgi-bin/.*.(cgi|pl|py|rb) {
gzip off;
fastcgi_pass 127.0.0.1:49232;
fastcgi_index cgi-bin.php;
fastcgi_param SCRIPT_FILENAME /etc/nginx/cgi-bin.php;
fastcgi_param SCRIPT_NAME /cgi-bin/cgi-bin.php;
fastcgi_param X_SCRIPT_FILENAME /usr/lib$fastcgi_script_name;
fastcgi_param X_SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_USER $remote_user;
}
Il file deve essere modificando a seconda della configurazione del proprio server.
Riavviare Nginx
sudo /etc/init.d/nginx restart