Mod_GeoIP是一个Apache模块,可用于将访问者IP地址的地理位置输入Apache Web服务器。 此模块允许您确定访客的国家 , 组织和位置 。 它特别适用于地理广告投放 , 目标内容 , 垃圾邮件战斗 , Cheat检测 ,根据其所在国家/地区重定向/阻止访问者等等。
GeoIP模块允许系统管理员根据客户端的地理位置重定向或阻止Web流量。 通过客户端IP地址学习地理位置。
Mod_GeoIP有两个不同的版本1是Free ,另一个是Paid并使用MaxMind GeoIP / GeoCity数据库。
- 免费版 :在免费版本中, Geo City和Country数据库可用,准确率为99.5% 。
- 付费版本 :在付费版本中,您将获得两个数据库,准确率达到99.8%,并提供有关IP地址的更多优先详细信息。
如果您想查看免费和付费版本之间的更多差异,请访问Maxmind.com 。
本文介绍如何使用EPEL存储库和YUM包管理器实用程序在RHEL和CentOS中为Apache设置和安装Mod_GeoIP模块。
我们假设您已经运行RHEL和CentOS系统,并且运行LAMP ( Linux , Apache , MySQL和PHP )。 如果没有,那么阅读我们的文章,我们已经展示了使用LAMP安装两个操作系统。
安装RHEL / CentOS
RHEL / CentOS上的LAMP设置
在RHEL和CentOS中启用EPEL存储库
默认情况下, mod_Geoip在RHEL / CentOS官方存储库下不可用,因此我们需要安装并启用第三方EPEL存储库。
# yum install epel-release
在RHEL和CentOS中安装Mod_GeoIP
一旦在系统上启用了EPEL存储库,就可以通过运行以下命令及其依赖包来简单地安装mod_geoip 。
# 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 # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz # gunzip GeoIP.dat.gz # gunzip GeoLiteCity.dat.gz
在Apache中启用Mod_GeoIP
安装模块后,使用命令行文本编辑器(如vi)打开并编辑模块主配置文件,然后在服务器范围内激活模块,如下面的摘录所示。
# vi /etc/httpd/conf.d/geoip.conf
将GeoIPEnable行从Off设置为On 。 此外,请确保添加GeoIP数据库文件的绝对路径。
<IfModule mod_geoip.c> GeoIPEnable On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache </IfModule>
重新启动Apache服务以反映更改。
# systemctl restart httpd OR # service httpd restart
但是,不建议在服务器范围内打开GeoIP模块。 您应该仅在实际执行流量重定向或阻止的<Location>
或<Directory>
块中启用GeoIP模块。
测试Mod_GeoIP模块
为了测试mod_geoip模块是否正常使用Apache,我们需要在Apache根目录下创建一个名为testgeoip.php的PHP文件( 例如/ var / www / html )。
# vi /var/www/html/testgeoip.php
将以下一段php代码插入其中。
<html> <head> <title>What is my IP address - determine or retrieve my IP address</title> </head> <body> <?php 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 "Your IP address is : $ipaddress"; } $country = getenv(GEOIP_COUNTRY_NAME); $country_code = getenv(GEOIP_COUNTRY_CODE); echo "<br/>Your country : $country ( $country_code ) "; ?> </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 # wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz # gunzip GeoIP.dat.gz # gunzip GeoLiteCity.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模块时遇到任何问题,请通过评论告诉我们,请不要忘记与您的朋友分享。