Statistiken über die Zugriffe auf einer Web-Seite sind wichtig, um das User-Verhalten besser nachvollziehen zu können. So kann beispielsweise festgestellt werden, welche Artikel und/oder Themen am häufigsten abgerufen werden. Häufig werden die umfangreichen Analysepakete Piwik oder Google Analytics verwendet. Google Analytics fällt für viele raus, da die Daten über die Seitenzugriffe an Google übermittelt werden. In Deutschland wird Google Analytics daher von vielen Datenschützern mit großer Skepsis  betrachtet (Stichwort Auftragsdatenverarbeitung). Die Alternative Piwik kann zwar auf dem eigenen Server betrieben werden und bietet auch eine Opt-Out-Möglichkeit für die User, benötigt aber eine eigene Datenbank und kann daher nicht von allen genutzt werden.

Dieser Artikel geht nicht auf die datenschutzrechtlichen Aspekte bei der Protokollierung ein. Ich empfehle dringend, dass ihr euch über die datenschutzrechtlichen Anforderungen (z.B. Anonymisierte Datenerhebung, rechtliche Hinweise, etc.) informiert, bevor ihr die Protokollierung aktiviert.

Eine Alternative, die auf die Auswertung der Apache Access-Logs aufsetzt ist AWStats. Hierbei handelt es sich um ein Perl-basiertes Tool, das auf dem Web-Server ausgeführt werden kann, sofern dieser Perl unterstützt (bei all-inkl.com sollte das für alle Tarife gelten). Ich habe AWStats bei all-inkl.com folgendermaßen installiert:

  1. Damit AWStats überhaupt funktionieren kann, muss die Protokollierung für die auszuwertende Domain in KAS unter dem Menüpunkt “Einstellungen -> Accesslog” aktiviert werden. Wegen des Datenschutzes sollte die Option “IP gekürzt”
  2. Per SSH (z.B. mit Putty) mit dem Server verbinden und ein neues Verzeichnis für die AWStats Installation erstellen:
    md awstats
  3. Für eine saubere Trennung und den einfacheren Zugriff habe ich im KAS  unter dem Menüpunkt “Subdomain” eine neue Sub-Domain angelegt, die auf das zuvor erstellte Verzeichnis zeigt. Beim anlegen der Sub-Domain unbedingt den SSL-Schutz aktivieren, damit später per SSL-Proxy auf AWStats zugegriffen werden kann.
  4. Auf dem Server in das  Verzeichnis awstats (webroot) wechseln:
    cd awstats
  5. Das AWStats-Archiv aus dem Internet per wget laden und anschließend entpacken:
    wget http://prdownloads.sourceforge.net/awstats/awstats-7.3.tar.gz
    tar xvfz awstats-7.3.tar.gz
  6. Die relevanten Dateien in das webroot verschieben und den Rest löschen:
    mv awstats-7.3/tools .
    mv awstats-7.3/wwwroot/* .
    rm -r awstats-7.3*
  7. Ein Datenverzeichnis anlegen und die Berechtigungen setzen:
    md data
    chmod 777 data
    chmod 755 tools/*.pl

    Die Berechtigungen der Perl-Dateien im cgi-bin-Verzeichnis sollten bereits korrekt gesetzt sein. Können sie jedoch nicht ausgeführt werden müssen die Berechtigungen manuell gesetzt werden:

    chmod 755 cgi-bin/*.pl
  8. Jetzt muss eigentlich nur noch eine Konfigurationsdatei für AWStats erzeugt werden. Dazu wird die Template-Datei awstats.model.conf kopieren. Der Dateiname muss dabei so abgeändert werden, dass der mittlere Teil (model) durch den Domain-Name der neu eingerichteten Sub-Domain ersetzt werden. In meinem Beispiel also wie folgt:
    cd cgi-bin
    cp awstats.model.conf awstats.awstats.klein-gedruckt.de.conf

    Anschließend müssen folgende Parameter in der Datei abgeändert werden:

    LogFile="gzip -d < ../../logs/access_log_%YYYY-24-%MM-24-%DD-24.gz |"
    SiteDomain="klein-gedruckt.de"
    HostAliases="localhost 127.0.0.1 REGEX[ssl-account\.com$] REGEX[klein-gedruckt\.de$]"
    DirData="../data"
    DirCgi="/awstats.klein-gedruckt.de/cgi-bin/"
    DirIcons="/awstats.klein-gedruckt.de/icon"
    AllowToUpdateStatsFromBrowser=1

    In den oben genannten Einstellungen muss klein-gedruckt.de natürlich durch die auszuwertende Domain ersetzt werden.

  9. Die Einstellungen in der Konfigurationsdatei funktionieren nur wenn die Seite über den SSL-Proxy (bei all-inkl also über https://sub.domain.com) aufgerufen wird. Daher erzwinge ich per .htaccess eine entsprechende Weiterleitung mit folgenden Einträgen:
    <IfModule mod_rewrite.c>
            RewriteEngine on
            #Falls kein HTTPS aufegrufen wurde...
            RewriteCond %{HTTPS} off
            #...und die Anfrage nicht von der Domain des Proxy kommt
            RewriteCond %{HTTP:X-FORWARDED-SERVER} !^ssl-account\.com$ [NC]
            #leite weiter auf den Proxy
            RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    </IfModule>
  10. Anschließend habe ich in der .htaccess noch den Zugriff auf die awstats.pl und index.php beschränkt und eine Basic-Authentisierung aktiviert (die Parameter für die Basic authentisierung müssen natürlich angepasst werden).
    <FilesMatch "(^$|index\.php|awstats\.pl)">
            SetEnvIf X-Forwarded-Host ^$ unenc_access
            AuthUserFile /path/to/.htpasswd
            AuthGroupFile /path/to/.htgroup
            AuthName "Secure Area"
            AuthType Basic
            Require user user1 user2
            Order deny,allow
            Deny from all
            Allow from env=unenc_access
            Satisfy any
    </FilesMatch>
    
    Order deny,allow
    Deny from all
  11. Für die korrekte Darstellung der Statistiken muss für das Verzeichnis /icon der Zugriff allerdings durch folgende .htaccess wieder erlaubt werden:
    Allow from all
  12. Damit ich die Seite nicht immer mit /cgi-bin/awstats.pl aufrufen muss, kann eine index.php angelegt werden, die entsprechend auf die korrekte awstats.pl weiterleitet:
    <?php
            // Permanent redirection
            header("HTTP/1.1 301 Moved Permanently");
            header("Location: https://awstats.klein-gedruckt.de/cgi-bin/awstats.pl");
            exit();
    ?>

    Wenn bis hier hin alles korrekt eingerichtet wurde, so kann AWStats über die unter Punkt 3 eingerichtete Sub-Domain aufgerufen werden. Anschließend sollte eine Weiterleitung auf den SSL-Proxy erfolgen und erst dann nach den Login-Daten für die Basic-Authentisierung gefragt werden. Nach erfolgreichem Login sollte man sich auf der AWStats-Seite wiederfinden.

  13. Existieren schon Log-Dateien, so erscheinen diese nicht automatisch in AWStats. Diese müssen zunächst importiert werden. Ein vollständiger import aller Logdateien über die Oberfläche ist zwar grundsätzlich möglich, wird aber bei einer größeren Menge an Logdateien fehlschlagen, wenn das CGI-Skript für die Verarbeitung zu lange braucht. Daher sollte der Erstimport manuell durchgeführt werden:
    rm data/*
    cd cgi-bin
    ./awstats.pl -update -config="awstats.klein-gedruckt.de" -LogFile="../tools/logresolvemerge.pl path/to/logs/access_log* |"

    Danach sollten die bisher angefallenen Log-Dateien in AWStats verfügbar sein.

  14. Danach kann im KAS ein Cronjob eingerichtet werden, so dass die neu anfallenden Log-Dateien in der Nacht automatisch importiert werden:
    • Protokoll / Pfad: ssl-account.com/sub.domain.de/cgi-bin/awstats.pl?framename=mainright&update=1
    • Zeitpunkt der Ausführung: Täglich (um 1:15 Uhr)
    • HTTP Benutzer/Passwort: Wie eingerichtet