Estadísticas awstats con NGINX


Sistema de estadísticas estáticas con NGINX

Por seguridad, NGINX no ejecuta CGIs nativamente, por lo que no se puede ejecutar directamente awstats.pl. En NGINX se debe instalar un sistema de estadísticas estáticas actualizables cada 5-10 minutos. Para ello realizamos la instalación de awstats y GEOIP, y configuramos el primero para alimentarse de los logs de NGINX en lugar de los de Apache. La configuración de cron para el update de BBDD es igual que en el caso de Apache:

/etc/awstats# grep nginx awstats.*.com.conf 
awstats.dominio1.com.conf:LogFile="/var/log/nginx/dominio1.com.access.log"
awstats.dominio2.com.conf:LogFile="/var/log/nginx/dominio2.com.access.log"

/etc/awstats# cat /etc/crontab 
(...)
# Actualizar bbdd awstats a partir de logs
0-50/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dominio1.com -update >/dev/null
23    6 * * *   root /usr/lib/cgi-bin/awstats.pl -config=dominio1.com -update >/dev/null
0-50/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dominio2.com -update >/dev/null
23    6 * * *   root /usr/lib/cgi-bin/awstats.pl -config=dominio2.com -update >/dev/null

A continuación creamos los directorios específicos:

# cd /var/www
# mkdir stats
# cd stats
# mkdir dominio1
# mkdir dominio1/historico
# mkdir dominio2
# mkdir dominio2/historico

El siguiente script generará y rotará las estadísticas:

/var/www/stats# cat /usr/local/bin/genera_estadisticas_awstats.sh 

#!/bin/bash

BINSTATIC="/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl"
BIN="/usr/lib/cgi-bin/awstats.pl"

for WEB in dominio1.com dominio2.com ;
do 
   # Entramos en el directorio de ficheros de estadisticas
   cd /var/www/stats/${WEB}/

   # Si estamos a dia 1, guardamos estadisticas del mes pasado antes
   # de generar las del nuevo mes. Se debe realizar antes de generar
   # las paginas estaticas nuevas.
   DIA="`date +%d`"
   if [ "x${DIA}x" == "x01x" ];
   then
      YESTERDAY="`date -d yesterday +%Y-%m`"
      OLD="historico"
      if [ ! -d ${OLD}/${YESTERDAY} ] ;
      then
         mkdir -p ${OLD}/${YESTERDAY}
         cp -f awstats.* ${OLD}/${YESTERDAY}
         cd ${OLD}/${YESTERDAY}/
         ln -sf awstats.${WEB}.html index.html
         cd /var/www/stats/${WEB}/
      fi
   fi

   # Generamos las estadisticas nuevas
   $BINSTATIC -update -config=${WEB} -lang=es -awstatsprog=${BIN}

   # Generamos un index.html estatico
   cat > index.html <<EOF
<HTML>
<CENTER><H1>Estadisticas de acceso a $WEB</H1></CENTER><BR><BR><P>
<UL><LI><A HREF="awstats.${WEB}.html">Mes actual.</A></LI>
<LI><A HREF="historico/">Historico.</A></LI>
</UL></HTML>
EOF

done

Ponemos dicho script en cron:

# Actualizar estadisticas en disco
5-55/10 * * * * root  /usr/local/bin/genera_estadisticas_awstats.sh >/dev/null

Las estadísticas son actualizadas en la bbdd cada 5 minutos (10 entre update y update y en los minutos 5 por el script de generación).

A continuación creamos el fichero de passwords de apache, pero dentro de nginx, y configuramos nginx con autenticación:

    #--- Estadisticas estaticas awstats -----------------------------
    location /stats {
       auth_basic  "Acceso privado a estadisticas Web";
       auth_basic_user_file /etc/nginx/http_passwords;

       autoindex on;
       alias /var/www/stats/dominio1.com/;
       index index.html
       break;
    }

    include /etc/nginx/awstats.conf;

Y se crea el siguiente fichero:

# cat /etc/nginx/awstats.conf;

    location /awstats-icon/ {
       alias /usr/share/awstats/icon/;
    }

    location /awstatsclasses/ {
       root /usr/share/awstats/lib/;
    }

    location /awstatscss/ {
       alias /usr/share/doc/awstats/examples/css/;
    }

También se pueden configurar las estadísticas en un virtualhost:

/etc/nginx/sites-enabled# cat 001-stats 
server {
    listen   80;
    server_name stats.dominio.es;

    access_log  /var/log/nginx/stats.access.log;
    error_log   /var/log/nginx/stats.error.log;

    root   /var/www/stats/dominio.es/;
    index  index.html;

    location / {
       auth_basic  "Acceso privado a estadisticas Web";
       auth_basic_user_file /etc/nginx/http_passwords;

       autoindex on;
       alias /var/www/stats/dominio.es/;
       index index.html
       break;
    }

    include /etc/nginx/awstats.conf;
}


Sistema de estadísticas via Proxypass a Apache

Si el servidor cuenta con un backend Apache (que sí que podrá ejecutar awstats.pl), podemos configurar awstats en Apache de la manera tradicional, y hacer un proxypass de las peticiones (un fallback estándar al backend será suficiente).



<Volver a Página de NGINX>