Halli Leute,
heute mal ein kleiner Beitrag, wie ich GeoIP für Nginx aktivere. GeoIP bietet Datenbanken mit Standortdaten zu bestimmten IP-Adressen. Damit erhält man deutlich akkuratere Standortdaten für seine Websitebesucher. Ich nutze unter anderem Piwik und wollte dort die IP-Erkennung mittels GeoIP PECL aktivieren. Ich nutze folgende Konfiguration:
- Debian 6.0
- Nginx 1.8.0
- PHP5-FPM
GeoIP Datenbanken automatisiert herunterladen und aktualisieren
Ich nutze dazu ein kleines sh-script. Die dazugehörigen Datenbanken habe ich von hier: http://dev.maxmind.com/geoip/legacy/geolite/#Downloads Es sind bei weitem nicht alle frei verfügbar, aber man nimmt halt was man kann ;).
#!/bin/sh # This script will automatically download the new databases of maxmind. It will send an mail in the beginning and in the end. # Send mail for beginning echo "GeoIP Aktualisierung wurde gestartet" | mail -s "GeoIP gestartet" deine@emailadresse.de # Clean folder rm GeoIP.dat.gz rm GeoIPv6.dat.gz rm GeoLiteCity.dat.gz rm GeoLiteCityv6.dat.gz rm GeoIPASNum.dat.gz rm GeoIPASNumv6.dat.gz # Download all data wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNumv6.dat.gz # Untar the archives rm GeoIP.dat gunzip -v GeoIP.dat.gz rm GeoIPv6.dat gunzip -v GeoIPv6.dat.gz rm GeoLiteCity.dat gunzip -v GeoLiteCity.dat.gz rm GeoLiteCityv6.dat gunzip -v GeoLiteCityv6.dat.gz rm GeoIPASNum.dat gunzip -v GeoIPASNum.dat.gz rm GeoIPASNumv6.dat gunzip -v GeoIPASNumv6.dat.gz # Rename GeoLiteCity.dat and GeoLiteCityv6.dat mv GeoLiteCity.dat GeoIPCity.dat mv GeoLiteCityv6.dat GeoIPCityv6.dat # Send mail for end echo "GeoIP Aktualisierung wurde erfolgreich beendet." | mail -s "GeoIP beendet" deine@emailadresse.de
Nun müssen wir das Script nur noch mittels eines chronjobs automatisch ausführen. Dazu kann man mit dem Befehl
crontab -e
die crontab bearbeiten und folgenen Eintrag hinzufügen:
40 15 18 * * /usr/share/GeoIP/./autoscript.sh
Nun haben wir eine aktuelle GeoIP Datenbank welche sich regelmäßig aktualisiert. Weiter gehts mit dem Einbinden in Nginx bzw. PHP.
Einbinden von GeoIP in PHP-FPM
Zunächst müssen wir noch ein paar Pakete installieren (Quelle: http://piwik.org/faq/how-to/faq_164/ ):
apt-get install php5-geoip php5-dev libgeoip-dev
Nun aktivieren wir noch Geoip mit folgendem Befehl:
pecl install geoip
Und zum Schluss muss geoip noch in der php.ini verewigt werden, damit dieses korrekt geladen wird. Achten darauf, dass ihr den richtigen Pfad für die GeoIP-Datenbanken setzt. In meinem Fall also /usr/share/GeoIP/
extension=geoip.so</span> geoip.custom_directory=/usr/share/GeoIP/
So zum Schluss nur noch PHP-FPM neustarten:
/etc/init.d/php5-fpm restart
Jetzt sollte alles laufen. Testen wir mal ob alles geklappt hat.
Abschließender Test ob GeoIP vollständig und korrekt installiert ist
Ob alles korrekt installiert wurde, kann man ganz einfach mit folgendem PHP-Script testen:
<?php $cst = array( 'GEOIP_COUNTRY_EDITION' => GEOIP_COUNTRY_EDITION, 'GEOIP_REGION_EDITION_REV0' => GEOIP_REGION_EDITION_REV0, 'GEOIP_CITY_EDITION_REV0' => GEOIP_CITY_EDITION_REV0, 'GEOIP_ORG_EDITION' => GEOIP_ORG_EDITION, 'GEOIP_ISP_EDITION' => GEOIP_ISP_EDITION, 'GEOIP_CITY_EDITION_REV1' => GEOIP_CITY_EDITION_REV1, 'GEOIP_REGION_EDITION_REV1' => GEOIP_REGION_EDITION_REV1, 'GEOIP_PROXY_EDITION' => GEOIP_PROXY_EDITION, 'GEOIP_ASNUM_EDITION' => GEOIP_ASNUM_EDITION, 'GEOIP_NETSPEED_EDITION' => GEOIP_NETSPEED_EDITION, 'GEOIP_DOMAIN_EDITION' => GEOIP_DOMAIN_EDITION, ); foreach ($cst as $k=>$v) { echo $k.': '.geoip_db_filename($v).' '.(geoip_db_avail($v) ? 'Available':''). "\n"; } ?>
mit
php geoip.php
sollte man dann eine Ähnliche Ausgabe erhalten:
GEOIP_COUNTRY_EDITION: /usr/share/GeoIP/GeoIP.dat Available GEOIP_REGION_EDITION_REV0: /usr/share/GeoIP/GeoIPRegion.dat GEOIP_CITY_EDITION_REV0: /usr/share/GeoIP/GeoIPCity.dat Available GEOIP_ORG_EDITION: /usr/share/GeoIP/GeoIPOrg.dat GEOIP_ISP_EDITION: /usr/share/GeoIP/GeoIPISP.dat GEOIP_CITY_EDITION_REV1: /usr/share/GeoIP/GeoIPCity.dat Available GEOIP_REGION_EDITION_REV1: /usr/share/GeoIP/GeoIPRegion.dat GEOIP_PROXY_EDITION: /usr/share/GeoIP/GeoIPProxy.dat GEOIP_ASNUM_EDITION: /usr/share/GeoIP/GeoIPASNum.dat Available GEOIP_NETSPEED_EDITION: /usr/share/GeoIP/GeoIPNetSpeed.dat GEOIP_DOMAIN_EDITION: /usr/share/GeoIP/GeoIPDomain.dat
Es gilt zu beachten, dass nicht alle Datenbanken verfügbar sind, da man für diese Zahlen muss. Alle frei verfügbaren Datenbanken wurden von mir eingebunden.
Hat alles geklappt, erhält man nun korrekte und genauere Standortdaten seiner Besucher. Wenn euch Fehler oder Anmerkungen auffallen / einfallen, immer her damit :). Ich freue mich darüber und werde Verbesserungen selbstverständlich in die Anleitung einbauen.