lighttpd mit mod_geoip
Auch wenn ein entsprechendes Modul namens mod_geoip für den lighttpd existiert, muss es leider händisch integriert werden. Da ich das Ganze vor ein paar Tagen machen musste, hab ich aus meinen Notizen ein kurzes Howto verfasst. Basissystem war in meinem Fall Debian 4.0, die aktuell stabile lighttpd-Version ist 1.4.18. Es gilt wie immer: Verzeichnisse sind entsprechend anzupassen, Handwerkszeug wie C-Compiler besorgst du dir, sofern nicht schon vorhanden, über deinen Paketmanager.
Als erstes solltest du dir alle benötigten Sourcen besorgen:
wget http://www.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2
wget -O mod_geoip.c \
http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c?format=raw
Wir haben jetzt die Sourcen von Maxmind für ihre API, lighttpd selbst und das Modul mod_geoip.
Als erstes sollten wir uns daran machen die API von Maxmind zu übersetzen.
cd GeoIP-1.4.4
./configure --prefix=/usr/local/GeoIP-1.4.4
make
make install
Jetzt ist lighty selbst dran. Als erstes muss das GeoIP-Modul in das src-Verzeichnis von lighttpd geschoben werden.
tar jxf lighttpd-1.4.18.tar.bz2
mv mod_geoip.c lighttpd-1.4.18/src/
cd lighttpd-1.4.18
Du musst die Datei src/Makefile.am verändern und folgenden Abschnitt nach dem letzten Modul hinzufügen:
mod_geoip_la_SOURCES = mod_geoip.c
mod_geoip_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_geoip_la_LIBADD = $(common_libadd) -lGeoIP
Bei mir sieht der Abschnitt dann so aus
lib_LTLIBRARIES += mod_status.la
mod_status_la_SOURCES = mod_status.c
mod_status_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_status_la_LIBADD = $(common_libadd)
lib_LTLIBRARIES += mod_accesslog.la
mod_accesslog_la_SOURCES = mod_accesslog.c
mod_accesslog_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_accesslog_la_LIBADD = $(common_libadd)
lib_LTLIBRARIES += mod_geoip.la
mod_geoip_la_SOURCES = mod_geoip.c
mod_geoip_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
mod_geoip_la_LIBADD = $(common_libadd) -lGeoIP
hdr = server.h buffer.h network.h log.h keyvalue.h \
response.h request.h fastcgi.h chunk.h \
settings.h http_chunk.h http_auth_digest.h \
md5.h http_auth.h stream.h \
fdevent.h connections.h base.h stat_cache.h \
plugin.h mod_auth.h \
etag.h joblist.h array.h crc32.h \
network_backends.h configfile.h bitset.h \
mod_ssi.h mod_ssi_expr.h inet_ntop_cache.h \
configparser.h mod_ssi_exprparser.h \
sys-mmap.h sys-socket.h mod_cml.h mod_cml_funcs.h \
splaytree.h proc_open.h status_counter.h \
mod_magnet_cache.h
DEFS= @DEFS@ -DLIBRARY_DIR="\"$(libdir)\"" -DSBIN_DIR="\"$(sbindir)\""
-- snip --
Nun muss das configure-Script noch auf den aktuellen Stand gebracht werden. (Zur Orientierung: pwd ergibt /usr/local/src/lighttpd-1.4.18)
make clean
Jetzt können wir mit dem gewohnten Übersetzungsvorgang beginnen. Das configure-Parameter –enable-maintainer-mode muss gesetzt werden, alle anderen dürfen nach eigenen Vorstellungen weggelassen, verändert und hinzugefügt werden.
make
make install
In deiner lighttpd.conf müssen jetzt noch zwei Konfigurationsdirektiven hinzugefügt und eine ergänzt werden. Erst einmal muss die Liste der Server-Module erweitert werden. Meine sieht wie folgt aus (relevant ist natürlich “mod_geoip”):
"mod_rewrite",
"mod_access",
"mod_auth",
"mod_fastcgi",
"mod_geoip",
"mod_secdownload",
"mod_accesslog" )
Die Konfiguration des GeoIP-Moduls sieht wie folgt aus:
geoip.memory-cache = "enable"
db-filename ist die Datenbank von Maxmind. Wenn memory-cache aktiviert ist, wird die gesamte Datenbank im Arbeitsspeicher gehalten, dadurch werden die Lookups enorm beschleunigt.
Die monatlich aktualisierte Datenbank bekommt ihr unter http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz.
Jetzt steht dir das GeoIP-Modul zur Verfügung. Wenn du als Datenbank GeoLiteCity einsetzt, setzt Lighty folgende Environmentvariablen:
GEOIP_COUNTRY_CODE3
GEOIP_COUNTRY_NAME
GEOIP_CITY_NAME
GEOIP_CITY_POSTAL_CODE
GEOIP_CITY_LATITUDE
GEOIP_CITY_LONG_LATITUDE
GEOIP_CITY_DMA_CODE
GEOIP_CITY_AREA_CODE

















