安装mod_geoip为Lighttpd在Debian蚀刻

在Debian Etch上安装mod_geoip对于Lighttpd

版本1.0
作者:Falko Timme

本指南介绍如何在Debian Etch系统上使用lighttpd设置mod_geoip 。 mod_geoip查找客户端最终用户的IP地址。 这允许您根据其国家/地区重定向或阻止用户。 您也可以将此技术用于您的OpenX (以前称为OpenAds或phpAdsNew)广告服务器,以允许地理位置定位 。 我将展示两种构建mod_geoip的方式 - 第一种方法是构建一个新的lighttpd .deb包(包括mod_geoip),这是我推荐的方式。 只有当您安装了Debian Etch lighttpd标准包时,这才有效。 如果你自己编辑了lighttpd,那么第二种方式是为你而设:它显示如何为lighttpd版本构建mod_geoip.so。

我不会保证这将为您工作!

初步说明

我假设你有一个运行的Debian Etch系统,具有工作lighttpd和PHP,例如本教程中所示: 在Debian Etch上安装带有PHP5和MySQL支持的Lighttpd

1第一路 - 构建一个新的lighttpd .deb包

如果您已经安装了Debian Etch lighttpd软件包,您应该使用这种方法来构建和安装一个包含mod_geoip的新的lighttpd .deb软件包。

首先,安装所有先决条件:

apt-get install build-essential dpkg-dev fakeroot debhelper cdbs libssl-dev zlib1g-dev libbz2-dev libattr1-dev libpcre3-dev libmysqlclient15-dev libldap2-dev libfcgi-dev libgdbm-dev libmemcache-dev liblua5.1-0-dev dpatch patchutils pkg-config uuid-dev libsqlite3-dev libxml2-dev automake libtool libgeoip1 libgeoip-dev

然后安装lighttpd源码包:

cd /usr/src
apt-get source lighttpd

看看当前目录:

ls -l
server1:/usr/src# ls -l
total 828
drwxr-xr-x 8 root root   4096 2008-05-11 19:24 lighttpd-1.4.13
-rw-r--r-- 1 root src   37420 2008-04-15 10:30 lighttpd_1.4.13-4etch8.diff.gz
-rw-r--r-- 1 root src    1098 2008-04-15 10:30 lighttpd_1.4.13-4etch8.dsc
-rw-r--r-- 1 root src  793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
server1:/usr/src#

如你所见,我们现在有lighttpd 1.4.13的源代码(从其中构建了Debian Etch的标准lighttpd软件包)。

我们继续:

cd lighttpd-1.4.13/src/
wget -O mod_geoip.c http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c?format=raw

http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.5.c?format=raw是for lighttpd 1.4.x. 对于lighttpd 1.5.x,您必须下载http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.4.c?format=raw

现在打开Makefile.am和最后一个lib_LTLIBRARIES节之后(应该是lib_LTLIBRARIES + = mod_accesslog.la节),添加以下节:

vi Makefile.am
[...]
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
[...]

它应该是这样的:

[...]
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
[...]

现在去../debian文件夹:

cd ../debian/

打开lighttpd.install并添加debian / tmp / usr / lib / lighttpd / mod_geoip.so行:

vi lighttpd.install
[...]
debian/tmp/usr/lib/lighttpd/mod_flv_streaming.so
debian/tmp/usr/lib/lighttpd/mod_geoip.so
debian/tmp/usr/lib/lighttpd/mod_indexfile.so
[...]

而已。 现在我们可以构建新的lighttpd .deb包:

cd ../
aclocal && automake -a && autoconf
dpkg-buildpackage

(在构建过程结束时,您很可能会看到以下可忽略的警告:

 dpkg-genchanges
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
(WARNING: Failed to sign .dsc and .changes file)
server1:/usr/src/lighttpd-1.4.13#

现在转到/ usr / src目录并检查其内容:

cd /usr/src/
ls -l
server1:/usr/src# ls -l
total 1748
drwxr-xr-x 8 root root   4096 2008-05-11 19:27 lighttpd-1.4.13
-rw-r--r-- 1 root src  222401 2008-05-11 19:26 lighttpd_1.4.13-4etch8.diff.gz
-rw-r--r-- 1 root src     862 2008-05-11 19:26 lighttpd_1.4.13-4etch8.dsc
-rw-r--r-- 1 root src    1944 2008-05-11 19:30 lighttpd_1.4.13-4etch8_i386.changes
-rw-r--r-- 1 root src  290640 2008-05-11 19:30 lighttpd_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src  793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
-rw-r--r-- 1 root src  100106 2008-05-11 19:29 lighttpd-doc_1.4.13-4etch8_all.deb
-rw-r--r-- 1 root src   63650 2008-05-11 19:30 lighttpd-mod-cml_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src   63462 2008-05-11 19:30 lighttpd-mod-magnet_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src   59042 2008-05-11 19:30 lighttpd-mod-mysql-vhost_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src   60712 2008-05-11 19:30 lighttpd-mod-trigger-b4-dl_1.4.13-4etch8_i386.deb
-rw-r--r-- 1 root src   70758 2008-05-11 19:30 lighttpd-mod-webdav_1.4.13-4etch8_i386.deb
server1:/usr/src#

如您所见,我们现在在该目录中有新的lighttpd .deb软件包。 使用mod_geoip安装新的lighttpd如下:

dpkg -i lighttpd_1.4.13-4etch8_i386.deb

现在我们必须配置lighttpd来使用mod_geoip。 首先我们下载GeoIP国家数据库:

mkdir /usr/local/data
cd /usr/local/data
wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
gunzip GeoIP.dat.gz

然后打开/etc/lighttpd/lighttpd.conf并将“mod_geoip”添加到server.modules部分; 还在server.modules部分下面添加geoip.db-filenamegeoip.memory-cache指令:

vi /etc/lighttpd/lighttpd.conf
[...]
server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_geoip",
            "mod_fastcgi",
#           "mod_rewrite",
#           "mod_redirect",
#           "mod_status",
#           "mod_evhost",
#           "mod_compress",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
#           "mod_expire",
#           "mod_flv_streaming",
#           "mod_evasive"
 )

geoip.db-filename = "/usr/local/data/GeoIP.dat"
geoip.memory-cache = "enable"
[...]

重启lighttpd:

/etc/init.d/lighttpd restart

要查看mod_geoip是否正常工作,我们可以在我们的一个网页空间中创建一个小型的PHP文件(例如/ var / www )(当然,您必须在lighttpd安装中启用PHP):

vi /var/www/geoiptest.php
<?php
print_r($_SERVER);
?>

在浏览器中调用该文件,并显示SERVER数组,其中包含GEOIP_COUNTRY_CODEGEOIP_COUNTRY_CODE3GEOIP_COUNTRY_NAME的值 (请确保您从公共IP地址(而不是本地IP地址调用该文件)

Array
(
    [FCGI_ROLE] => RESPONDER
    [SERVER_SOFTWARE] => lighttpd/1.4.13
    [SERVER_NAME] => server1.example.com
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PORT] => 80
    [SERVER_ADDR] => 192.168.0.101
    [REMOTE_PORT] => 60043
    [REMOTE_ADDR] => 1.2.3.4
    [SCRIPT_NAME] => /info.php
    [PATH_INFO] =>
    [SCRIPT_FILENAME] => /var/www/info.php
    [DOCUMENT_ROOT] => /var/www/
    [REQUEST_URI] => /info.php
    [QUERY_STRING] =>
    [REQUEST_METHOD] => GET
    [REDIRECT_STATUS] => 200
    [SERVER_PROTOCOL] => HTTP/1.1
    [HTTP_HOST] => server1.example.com
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
    [HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip,deflate
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
    [HTTP_KEEP_ALIVE] => 300
    [HTTP_CONNECTION] => keep-alive
    [GEOIP_COUNTRY_CODE] => DE
    [GEOIP_COUNTRY_CODE3] => DEU
    [GEOIP_COUNTRY_NAME] => Germany
    [ORIG_PATH_INFO] =>
    [ORIG_SCRIPT_NAME] => /info.php
    [ORIG_SCRIPT_FILENAME] => /var/www/info.php
    [PATH_TRANSLATED] =>
    [PATH] => /sbin:/bin:/usr/sbin:/usr/bin
    [SHELL] => /bin/bash
    [USER] => root
    [PHP_FCGI_CHILDREN] => 4
    [PHP_FCGI_MAX_REQUESTS] => 10000
    [PHP_SELF] => /info.php
    [argv] => Array
        (
        )

    [argc] => 0
)

如果要为OpenX广告服务器使用lighttpd + mod_geoip,请确保在“设置”>“主要设置”>“地理位置定位设置”下选择MaxMind mod_apache GeoIP 。 这也适用于lighttod + mod_geoip。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏