Mod_GeoIP模块用于获取访问者的IP地址的地理位置到Apache Web服务器。 这个模块允许您确定访问者的国家 , 组织和位置 。 这是地缘广告投放 , 目标内容 , 反垃圾邮件 , Cheat检测 , 重定向/阻断基于自己的国家,游客更特别有用。
为Apache安装Mod_GeoIP
Mod_GeoIP有两个不同的版本,一个是免费的 ,另一种是付费和使用的MaxMind 的GeoIP / GeoCity数据库。
- 免费版本 :在自由版本的地理城市和国家数据库 availble的99.5%的准确性。
- 付费版 :在付费版本,你将获得99.8%的准确率两个数据库有关IP地址的一些细节advanaced。
如果你想看看betweetn 免费和付费版本更多的差异,请访问Maxmind.com。
该如何引导解释了如何设置和使用EPEL资源库和YUM包管理工具在RHEL 6.3 / 6.2 / 6.1 / 6.0 / 5.8 的CentOS 6.3 / 6.2 / 6.1 / 6.0 / 5.8安装Mod_GeoIP模块的Apache。
我们假设您已经运行RHEL 6.3和CentOS 6.3系统工作LAMP(Linux操作系统 ,Apache,MySQL和PHP)的设置。 如果没有,那么请阅读我们的论文中,我们已经证明与LAMP两种操作系统的安装。
安装RHEL / CentOS 6.3
RHEL / CentOS 6.3上的LAMP设置
在RHEL / CentOS 6/5中启用EPEL存储库
默认情况下mod_Geoip是不是在RHEL / CentOS的官方库中的即时拍摄的,所以我们需要安装并启用第三方EPEL软件库。
RHEL / CentOS 6
# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm # rpm -Uvh epel-release-6-7.noarch.rpm Preparing... ########################################### [100%] 1:epel-release ########################################### [100%]
RHEL / CentOS 5
# wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm # rpm -Uvh epel-release-5-4.noarch.rpm Preparing... ########################################### [100%] 1:epel-release ########################################### [100%]
在RHEL / CentOS 6/5中安装Mod_GeoIP
一旦你的系统上启用EPEL软件库,你可以通过它们的相关性程序包运行以下命令,简单的安装。
# yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel
下载最新的地理城市和国家数据库
这是下载最新的地理城市和国家数据库 ,以便及时不错的主意。
# cd /usr/share/GeoIP/ # mv GeoIP.dat GeoIP.dat_org # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz # gunzip GeoIP.dat.gz
在Apache中启用Mod_GeoIP
为了使mod_geoip模块,您需要打开/etc/httpd/conf/httpd.conf配置文件。
# vi /etc/httpd/conf/httpd.conf
并在底部添加以下代码行。
<IfModule mod_geoip.c> GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat </IfModule>
重新启动Apache服务以反映更改。
# /etc/init.d/httpd restart OR # service httpd restart
测试Mod_GeoIP模块
要测试mod_geoip模块与Apache正常工作,我们需要创造( 如在/ var / www / html等 )Apache的根目录下名为testgeoip.php的PHP文件。
# vi /var/www/html/testgeoip.php
插入以下一段php代码。
<html> <head> <title>What is my IP address and Country</title> </head> <body> <? if (getenv(HTTP_X_FORWARDED_FOR)) { $pipaddress = getenv(HTTP_X_FORWARDED_FOR); $ipaddress = getenv(REMOTE_ADDR); echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ; } else { $ipaddress = getenv(REMOTE_ADDR); echo "My IP address is : $ipaddress"; } $country = getenv(GEOIP_COUNTRY_NAME); echo "<br />My Country : $country"; ?> </body> </html>
现在,尝试调用该文件使用Web浏览器( 例如http://localhost/testgeoip.php)。 你会得到你的IP地址和国家的详细信息。
更新GeoIP数据库
GeoIP数据库每月开始更新。 因此,它是非常重要的保持GeoIP数据库的最新。 要下载最新版本的数据库,请使用以下命令。
# cd /usr/share/GeoIP/ # mv GeoIP.dat GeoIP.dat_org # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz # gunzip GeoIP.dat.gz
自动GeoIP数据库更新
我们编写了一个smaill shell脚本,每月会自动下载最新版本的GeoIP数据库。 只要将以下任何脚本下/etc/cron.monthly中 。
脚本1
# Automatic GeoIP Database Update from www.youcl.com #!/bin/sh cd /usr/share/GeoIP mv GeoIP.dat GeoIP.dat_org wget -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gzip -d -f GeoIP.dat.gz
脚本2
#!/bin/sh GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database" GEOIPDIR=/usr/share/GeoIP TMPDIR= DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6" if [ -d "${GEOIPDIR}" ]; then cd $GEOIPDIR if [ -n "${DATABASES}" ]; then TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX) echo "Updating GeoIP databases..." for db in $DATABASES; do fname=$(basename $db) wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz" gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat" mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat" chmod 0644 "${GEOIPDIR}/${fname}.dat" done [ -d "${TMPDIR}" ] && rm -rf $TMPDIR fi fi
根据国家/地区重定向用户
下面的示例代码将重定向基于我们设置为AS( 亚洲 )国家代码的用户。 这样,您可以根据他们的县代码重定向任何用户。
GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat # Redirect one country RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$ RewriteRule ^(.*)$ https://www.youcl.com$1 [R,L]
根据国家/地区阻止用户
此示例将根据GeoIP设置的国家/地区代码阻止用户。 下面的例子将阻止来自AS( 亚洲 )和美国 ( 美国 )国家的用户。
GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry # ... place more countries here Deny from env=BlockCountry
根据国家/地区允许用户
以下示例将只允许来自下面提到的国家的用户。
GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry # ... place more countries here Deny from all Allow from env=AllowCountry
有关mod_geoip及其用法的详细信息可以在这里找到http://www.maxmind.com/app/mod_geoip 。 如果你在设置mod_geoip模块有任何麻烦,请通过评论让我们知道,请不要忘记与你的朋友分享。