TracNav
Core Features...
- Configuration File Syntax
- Configuration Options
- Change Root
- Performance
- PerformanceFastCGI
- SSL
- Traffic Shaping
- Using SMP
Modules...
- mod_accesslog
- mod_access
- mod_alias
- mod_auth
- mod_cache
- mod_cgi
- mod_cml
- mod_compress
- mod_deflate
- mod_dirlisting
- mod_evasive
- mod_evhost
- mod_expire
- mod_extforward
- mod_fastcgi
- mod_flv_streaming
- mod_geoip
- mod_magnet
- mod_mem_cache
- mod_mysql_vhost
- mod_proxy
- mod_redirect
- mod_rewrite
- mod_rrdtool
- mod_scgi
- mod_secdownload
- mod_setenv
- mod_simple_vhost
- mod_ssi
- mod_status
- mod_trigger_b4_dl
- mod_userdir
- mod_useronline
- mod_usertrack
- mod_webdav
Modules (1.5 only)...
- mod_proxy_core
- mod_sql_vhost_core
- mod_uploadprogress
- mod_deflate
Internals...
- FastCGI state-engine
- Plugin interface
- HTTP state-engine
Additional...
- User written Modules
ip based geographic lookups...
Module: mod_geoip
Requirements
| Packages: | GeoIP C API & Library (http://www.maxmind.com/download/geoip/api/c/) |
|---|
Overview
mod_geoip is a module for fast ip/location lookups. It uses MaxMind GeoIP / GeoCity databases. If the ip was found in the database the module sets the appropriate environments variables to the request, thus making other modules/fcgi be informed.
Note
Currently only country/city databases are supported because they have a free version that i can test.
(http://www.maxmind.com/download/geoip/database/ - GeoIP.dat.gz for Countries, GeoLiteCity.dat.gz for Countries & Cities)
Installation
NOTE: As of 1.4.14 the lighttpd distribution does not include the compile file required to perform a automake in the source directory. Use "automake -a" instead.
- Download mod_geoip.c (http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c) - (for lighttpd 1.5 use http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.4.c) and rename it to mod_geoip.c
- Copy mod_geoip.c into lighttpd src directory.
- Edit your src/Makefile.am and add this after the last module:
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
- Go back to lighttpd root directory and first do: aclocal && automake -a && autoconf, after that do: make clean; ./configure --enable-maintainer-mode; make; make install
NOTE: the command of 'make clean' gives error on Fedora 4 and may not be necessary to compile properly. [j lightstone//GlobalAdSales.company]
- Make sure /usr/local/lib is in your ld.so.conf file and rebuld the ld database (using: ldconfig).
- Add to the config file server.modules = ("mod_geoip") [j lightstone//GlobalAdSales.company]
Configuration Options
NOTE: in lighttpd 1.5.x add the config vars only to the global config - adding into a vhost crashes lighty!
mod_geoip uses two configuration options.
- geoip.db-filename = <path to the geoip or geocity database>
- geoip.memory-cache = <enable|disable> : default disabled
if enabled, mod_geoip will load the database binary file to memory for very fast lookups. the only penalty is memory usage.
NOTE: mod_geoip will determine the database type automatically so if you enter GeoCity database path it will load GeoCity Env.
Environment
Every database sets it's own ENV:
GeoIP (Country):
GEOIP_COUNTRY_CODE GEOIP_COUNTRY_CODE3 GEOIP_COUNTRY_NAME
GeoCity:
GEOIP_COUNTRY_CODE 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
Examples
mod_geoip + php
NOTE: in lighttpd 1.5.x add the config vars only to the global config - adding into a vhost crashes lighty!
when using fastcgi (not only php) you can access mod_geoip env and do as you please. this example just prints all mod_geoip envs to the client, html.
Config-file
geoip.db-filename = "/your-geoip-db-path/GeoLiteCity.dat" geoip.memory-cache = "enable"
index.php
<?php
$country_code = $_SERVER['GEOIP_COUNTRY_CODE'];
$country_code3 = $_SERVER['GEOIP_COUNTRY_CODE3'];
$country_name = $_SERVER['GEOIP_COUNTRY_NAME'];
$city_region = $_SERVER['GEOIP_CITY_REGION'];
$city_name = $_SERVER['GEOIP_CITY_NAME'];
$city_postal_code = $_SERVER['GEOIP_CITY_POSTAL_CODE'];
$city_latitude = $_SERVER['GEOIP_CITY_LATITUDE'];
$city_long_latitude = $_SERVER['GEOIP_CITY_LONG_LATITUDE'];
$city_dma_code = $_SERVER['GEOIP_CITY_DMA_CODE'];
$city_area_code = $_SERVER['GEOIP_CITY_AREA_CODE'];
echo "<html>\n<body>\n\t<br>\n";
echo 'Country Code: ' . $country_code . '<br>';
echo 'Country Code 3: ' . $country_code3 . '<br>';
echo 'Country Name: ' . $country_name . '<br>';
echo '<br>';
echo 'City Region: ' . $city_region . '<br>';
echo 'City Name: ' . $city_name . '<br>';
echo 'City Postal Code: ' . $city_postal_code . '<br>';
echo 'City Latitude: ' . $city_latitude . '<br>';
echo 'City Long Latitude: ' . $city_long_latitude . '<br>';
echo 'City DMA Code: ' . $city_dma_code . '<br>';
echo 'City Area Code: ' . $city_area_code . '<br>';
echo "</body>\n</html>";
?>
country based redirect
Config-file
$HTTP["host"] =~ "www.domain.com" {
url.rewrite = ( "" => "/redirect.php")
}
redirect.php
<?php
$country_code = $_SERVER['GEOIP_COUNTRY_CODE'];
header ('Location: http://' . $country_code . '.domain.com/');
?>
Currently redirecting based on mod_geoip through the lighttpd config file is possible with some patches: http://trac.lighttpd.net/trac/ticket/1546. An alternative would be to use mod_magnet.
Downloads
mod_geoip.c (http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c)
mod_geoip.c for lighttpd 1.5.x (http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.4.c)

