由于网站活动需要做一些针对地区的活动页面显示,不同地区打开不同的活动页,当然有些CDN和DNS也可以做到,只是一般都收费和麻烦一些.而且又不要求那么高的准确性,就看了下geoip的使用.
一、GEOIP和GEOIP2的区别
Geo是geographic的缩写,意思是地理的,GeoIP即为IP地理位置数据库,可以根据IP获得地理位置信息。
IP地理定位本质上是不精确的,地点通常靠近人口中心。GeoIP数据库提供的任何位置不应用于识别特定地址或家庭,使用精度半径作为IP地址返回的纬度和经度坐标的地理定位精度指示,IP地址的实际位置可能在这个半径和经纬度坐标所定义的区域内。
GEOIP目前已经发展到GEOIP2,GEOIP的免费库GeoLite版本后缀为.dat(有国家/城市/ASN等),GEOIP2的免费库GeoLite2版本后缀为.mmdb(有国家/城市/ASN等),GEOIP2的收费库GeoIP2 Enterprise版本后缀为.mmdb(有国家/城市/ASN等)
ASN(Autonomous System Number)是为每个大型网络分配的编号,该编号全球唯一。通过查询IP地址隶属的ASN编号,可以了解该IP地址隶属的网络运营商,以及大致的地址位置。Nmap提供asn-query脚本来查询IP地址的ASN编号,并给出BGP、区域、起始和节点编号等信息。需要注意的是 城市City 和 国家Country 库中不含ASN信息。
MaxMind 提供了免费的GEOIP数据库,坏消息是MaxMind 官方已经停止支持dat格式的ip库。在其他地方可以找到dat格式的文件,或者老版本的,当然数据不可能最新,多少有误差。
GEOIP的好处就是可以动态加载到NGINX等软件里,不需要重新源代码构建使用.而且GEOIP数据库和支持库可以yum安装.
GEOIP2 NGINX等软件使用必须重新源代码构建.
GeoLite2是GeoIP2的免费版本,与GeoIP2数据库相比准确性较差。GeoLite2数据库每周更新国家、城市和自治系统编号信息,更新时间为每周二。此前,MaxMind一直提供GeoLite2公开的访问下载地址,但从2019年12月30日开始,MaxMind不再提供GeoLite2公开的访问下载地址,需要用户注册一个MaxMind帐户并获取许可密钥,才能下载GeoLite2数据库。
以下操作都在Centos7的服务器,其他系统请自行相应变动:
二、GEOIP的安装以及NGINX和PHP使用方法
GEOIP的安装
1.yum安装的geoip
先装epel源(下面的yum安装环境都默认安装过epel源)
1 |
yum install epel-release |
再装
1 |
yum install GeoIP GeoIP-data GeoIP-devel |
想详细知道每个包作用可以查看下各个GEO包的说明,查看GeoIP的yum包说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
yum info GeoIP Name : GeoIP Arch : x86_64 Version : 1.5.0 Release : 14.el7 Size : 3.7 M Repo : installed From repo : base Summary : Library for country/city/organization to IP address or hostname mapping URL : http://www.maxmind.com/app/c License : LGPLv2+ and GPLv2+ and CC-BY-SA Description : GeoIP is a C library that enables the user to find the country that any IP : address or hostname originates from. It uses a file based database that is : accurate as of June 2007 and can optionally be updated on a weekly : basis by installing the GeoIP-update package. This database simply contains IP : blocks as keys, and countries as values. This database should be more complete : and accurate than using reverse DNS lookups. : : This package includes GeoLite data created by MaxMind, available from : http://www.maxmind.com/ |
安装GEOIP数据库yum包:
1 2 |
yum install GeoIP 安装同时会附带安装依赖geoipupdate |
安装完成后在/usr/share/GeoIP/下出现2个dat数据库,2个软链(这个只有国家库/分IPv4和IPv6)
1 2 3 4 5 6 7 |
cd /usr/share/GeoIP/ ls -l lrwxrwxrwx 1 root root 17 May 12 00:20 GeoIP.dat -> GeoIP-initial.dat -rw-r--r-- 1 root root 1242574 Aug 8 2019 GeoIP-initial.dat lrwxrwxrwx 1 root root 19 May 12 00:20 GeoIPv6.dat -> GeoIPv6-initial.dat -rw-r--r-- 1 root root 2322773 Aug 8 2019 GeoIPv6-initial.dat |
系统增加3个命令geoiplookup geoiplookup6 geoipupdate
geoiplookup查看IPv4,geoiplookup6查看IPv6,geoipupdate本来用于升级GEOIP数据库,但是官方停止维护所以下不到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
geoiplookup 8.8.8.8 GeoIP Country Edition: US, United States GeoIP City Edition, Rev 1: US, N/A, N/A, N/A, N/A, 37.750999, -97.821999, 0, 0 GeoIP ASNum Edition: AS15169 Google LLC geoiplookup6 2001:4860:4860::8888 GeoIP Country V6 Edition: US, United States GeoIP ASNum V6 Edition: AS15169 Google LLC GeoIP City Edition V6, Rev 1: US, N/A, N/A, N/A, 37.750999, -97.821999, 0, 0 geoipupdate Received an unexpected HTTP status code of 401 from https://updates.maxmind.com/app/update_secure?db_md5=00000000000000000000000000000000&challenge_md5=0f74c90dab238e526f72b98062232111&user_id=0&edition_id=GeoLite2-Country: Invalid account ID |
如果有需要可以继续安装一下城市和AS数据库,查看GeoIP-data的yum包说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
yum info GeoIP-data Name : GeoIP-data Arch : noarch Version : 1.5.0 Release : 14.el7 Size : 50 M Repo : installed From repo : base Summary : Static snapshot of GeoIP databases URL : http://www.maxmind.com/app/c License : LGPLv2+ and GPLv2+ and CC-BY-SA Description : Snapshot of IPv4 and IPv6 databases for GeoIP. These databases are not : regularly updated, use a cron job from GeoIP-update package to get fresh ones. : : This package includes GeoLite data created by MaxMind, available from : http://www.maxmind.com/ |
安装GeoIP-data的yum包:
1 |
yum install GeoIP-data |
安装完成后在/usr/share/GeoIP/下新出现4个dat数据库,4个软链(城市/ASN库/分IPv4和IPv6)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cd /usr/share/GeoIP/ ls -l lrwxrwxrwx 1 root root 39 May 12 00:45 GeoIPASNum.dat -> /usr/share/GeoIP/GeoIPASNum-initial.dat -rw-r--r-- 1 root root 4638365 Aug 8 2019 GeoIPASNum-initial.dat lrwxrwxrwx 1 root root 41 May 12 00:45 GeoIPASNumv6.dat -> /usr/share/GeoIP/GeoIPASNumv6-initial.dat -rw-r--r-- 1 root root 5628114 Aug 8 2019 GeoIPASNumv6-initial.dat lrwxrwxrwx 1 root root 38 May 12 00:45 GeoIPCity.dat -> /usr/share/GeoIP/GeoIPCity-initial.dat -rw-r--r-- 1 root root 20539238 Aug 8 2019 GeoIPCity-initial.dat lrwxrwxrwx 1 root root 40 May 12 00:45 GeoIPCityv6.dat -> /usr/share/GeoIP/GeoIPCityv6-initial.dat -rw-r--r-- 1 root root 21684452 Aug 8 2019 GeoIPCityv6-initial.dat lrwxrwxrwx 1 root root 17 May 12 00:20 GeoIP.dat -> GeoIP-initial.dat -rw-r--r-- 1 root root 1242574 Aug 8 2019 GeoIP-initial.dat lrwxrwxrwx 1 root root 19 May 12 00:20 GeoIPv6.dat -> GeoIPv6-initial.dat -rw-r--r-- 1 root root 2322773 Aug 8 2019 GeoIPv6-initial.dat |
上面是GEOIP的数据库安装,下来安装GEOIP的支持库,查看GeoIP-devel说明:
1 2 3 4 5 6 7 8 9 10 11 12 |
yum info GeoIP-devel Name : GeoIP-devel Arch : x86_64 Version : 1.5.0 Release : 14.el7 Size : 14 k Repo : base/7/x86_64 Summary : Development headers and libraries for GeoIP URL : http://www.maxmind.com/app/c License : LGPLv2+ and GPLv2+ and CC-BY-SA Description : Development headers and static libraries for building GeoIP-based applications. |
安装GEOIP的支持库:
1 |
yum install GeoIP-devel |
最后还有一个geoipupdate-cron可以安装,查看说明(就是geoipupdate的一个定时周升级任务):
1 2 3 4 5 6 7 8 9 10 11 12 |
yum info geoipupdate-cron Name : geoipupdate-cron Arch : noarch Version : 2.5.0 Release : 1.el7 Size : 8.4 k Repo : base/7/x86_64 Summary : Cron job to do weekly updates of GeoIP databases URL : http://dev.maxmind.com/geoip/geoipupdate/ License : GPLv2 Description : Cron job for weekly updates to GeoIP Legacy database from MaxMind. |
安装geoipupdate-cron:
1 |
yum install geoipupdate-cron |
安装完成后在/etc/cron.weekly多出一个geoipupdate任务
1 2 3 4 5 6 |
cat /etc/cron.weekly/geoipupdate #!/bin/sh # This updates the IPv4 databases based on product numbers in /etc/GeoIP.conf geoipupdate > /dev/null |
geoipupdate都无法升级,所以这个也是没啥的用,完全不用装.
2.编译安装的geoip
由于安装GeoIP支持库由于官方地址的C API下载不到,所以没有测试也只是写出来看一下,也许其他地方还能找到:
1 2 3 4 5 6 7 8 |
cd /tmp wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz tar -zxvf GeoIP.tar.gz cd GeoIP-1.4.6 yum install zlib-devel ./configure make make install |
安装完以后写入动态链接
1 2 |
echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf ldconfig |
应该是相当于yum install GeoIP-devel,不知道两者有什么区别,个人理解应该是相同的.
GeoIP数据库也可以单独下载,yum安装的GeoIP数据库是IPv4和IPv6分离的,也可以去第三方下载合并的
第三方下载地址(GeoLite的dat数据库):https://www.miyuru.lk/geoiplegacy
在IPv6/IPv4数据库中,IPv4 地址映射为 IPv6 地址
该产品包括 MaxMind 创建的 GeoLite2 数据,可从 https://www.maxmind.com 或 IP Geolocation by DB-IP 获得
NGINX安装GeoIP模块
因为系统自带的nginx版本低,所以用了官方的yum源http://nginx.org/en/linux_packages.html#RHEL-CentOS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
vi /etc/yum.repos.d/nginx.repo [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true |
1.yum安装的nginx
1 |
yum install nginx-module-geoip |
安装完以后在nginx.conf里添加
1 2 3 4 5 6 7 8 9 10 |
vi /etc/nginx/nginx.conf load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so; load_module /usr/lib64/nginx/modules/ngx_stream_geoip_module.so; http{ …… geoip_country /usr/share/GeoIP/GeoIP.dat; …… } |
然后server和location下面就可以写
1 2 3 |
if ($geoip_country_code = CN) { root /home/cn; } |
此时CN的IP就会打开指定目录的页面.
关于nginx的geoip模块使用可以参考官方说明:http://nginx.org/en/docs/http/ngx_http_geoip_module.html
官方的plus版本有另外的插件可以参考下:https://docs.nginx.com/nginx/admin-guide/dynamic-modules/geoip/
plus版本(收费或试用)https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-plus/
2.编译安装的nginx
默认nginx是不编译--with-http_geoip_module的,所以在编译的时候加上就可以了,省略号……代表以前编译过的模块
1 2 3 |
./configure …… --with-http_geoip_module make make install |
需要注意一点,如果没有安装过C API或者yum install GeoIP-devel的话,编译会报错(我是lnmp环境编译的nginx,也许单独编译nginx报错不一样):
1 2 3 4 5 6 7 |
checking for GeoIP library ... not found checking for GeoIP library in /usr/local/ ... not found checking for GeoIP library in /usr/pkg/ ... not found checking for GeoIP library in /opt/local/ ... not found ./configure: error: the GeoIP module requires the GeoIP library. You can either do not enable the module or install the library. |
PHP安装GeoIP模块
1.YUM安装的PHP
查看yum的php的geoip扩展包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
yum info php-pecl-geoip Name : php-pecl-geoip Arch : x86_64 Version : 1.0.8 Release : 5.el7 Size : 31 k Repo : installed From repo : epel Summary : Extension to map IP addresses to geographic places URL : http://pecl.php.net/package/geoip License : PHP Description : This PHP extension allows you to find the location of an IP address : City, State, Country, Longitude, Latitude, and other information as : all, such as ISP and connection type. It makes use of Maxminds geoip : database |
安装
1 |
yum install php-pecl-geoip |
2.编译安装的PHP
下载 GeoIP 的 PECL 扩展
下载地址 http://pecl.php.net/package/geoip
1 2 3 |
cd /usr/local/src wget -c http://pecl.php.net/get/geoip-1.1.1.tgz tar -zxvf geoip-1.1.1.tgz |
安装 GeoIP 的 PECL 扩展
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cd geoip-1.1.1 phpize whereis php-config php-config: /usr/local/php/bin/php-config /usr/share/man/man1/php-config.1.gz 下面--with-php-config命令写上面的目录地址就行 ./configure --with-php-config=/usr/local/php/bin/php-config --with-geoip make make install 在 php.ini 里加上 extension=geoip.so |
验证安装成功没直接php模块输出或者phpinfo()里查看下,有输出就是安装好了,
1 2 |
php -m | grep geoip geoip |
使用方法看官方:https://www.php.net/manual/zh/book.geoip.php
3.nginx的fastcgi模式执行的php
还有一种方法可以让php不安装扩展使用geoip,就是在nginx的FASTCGI变量里
1 |
vi /usr/local/nginx/conf/nginx.conf |
找到 http 段并加入如下以内容进行geoip 国家/地区查找:
1 2 3 4 5 6 7 |
### 设置用于从 IP 地址确定访问者国家/地区的 .dat 文件的路径 ### geoip_country /usr/local/share/GeoIP/GeoIP.dat; ### 设置 FASTCGI 变量 ### fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code; fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3; fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name; |
保存并关闭文件。如果您想要城市级别的地理定位,请将其设置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
### 设置用于从 IP 地址确定访问者国家/地区的 .dat 文件的路径 ### geoip_city /usr/local/share/GeoIP/GeoLiteCity.dat; ### 设置 FASTCGI 变量 ### fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code; fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3; fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name; fastcgi_param GEOIP_REGION $geoip_region; fastcgi_param GEOIP_CITY $geoip_city; fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code; fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code; fastcgi_param GEOIP_LATITUDE $geoip_latitude; fastcgi_param GEOIP_LONGITUDE $geoip_longitude; |
保存并关闭文件。最后,重新加载 nginx:
1 |
/usr/local/nginx/sbin/nginx -s reload |
PHP测试脚本:
创建一个php测试脚本如下geoip.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<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> |
三、GEOIP2的安装以及NGINX和PHP使用方法
GEOIP2的安装
GeoIP2数据库下载:
MaxMind帐户注册地址:GeoLite2 Sign Up | MaxMind
直连访问,不要使用代理服务器,否则显示错误,无法注册
注册完成后,在许可密钥界面生成许可密钥(License key),妥善保管好你的许可密钥(License key)。
GeoLite2数据库的下载地址即为:https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=此处替换为证书密钥&suffix=tar.gz
GeoIP2数据库下载:
https://dev.maxmind.com/geoip/geoip2/geolite2/
官网提供三种库,2种格式, 首先 官网API是需要使用二进制库文件, CSV格式的库可以导入其他程序 或 供你简单浏览。
三种库的区别可以从名字上就可以看出来:
City 精确到城市(大小70M左右),
Country 精确到国家(4M左右),
ASN 用于产看IP地址的拥有者(7M左右). 需要注意的是 City 和 Country 库中不含ASN信息。
由于数据库经常更新, 官网还提供了更新的方案:
GeoIP2 Release Notes | MaxMind Developer Portal
除了自己注册下载以外,还可以使用网络上公开的Geolite2数据库
Releases · Dreamacro/maxmind-geoip · GitHub
https://geolite.clash.dev
https://static.clash.to/GeoIP2/GeoIP2-Country.tar.gz
很多linux版本支持这个库, 可以使用yum 或 apt 进行下载, windows上使用的话就需要自己编译了.
yum可以安装geolite2,先查看说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
yum info 'geolite2*' Available Packages Name : geolite2-city Arch : noarch Version : 20180605 Release : 1.el7 Size : 19 M Repo : base/7/x86_64 Summary : Free IP geolocation city database URL : https://dev.maxmind.com/geoip/geoip2/geolite2/ License : CC-BY-SA Description : GeoLite2 databases are free IP geolocation databases comparable to, but less : accurate than, MaxMind's GeoIP2 databases. This product includes GeoLite2 data : created by MaxMind, available from http://www.maxmind.com. Name : geolite2-country Arch : noarch Version : 20180605 Release : 1.el7 Size : 1.0 M Repo : base/7/x86_64 Summary : Free IP geolocation country database URL : https://dev.maxmind.com/geoip/geoip2/geolite2/ License : CC-BY-SA Description : GeoLite2 databases are free IP geolocation databases comparable to, but less : accurate than, MaxMind's GeoIP2 databases. This product includes GeoLite2 data : created by MaxMind, available from http://www.maxmind.com. |
安装
1 |
yum install geolite2-city geolite2-country |
安装完成后/usr/share/GeoIP/会多出2个库GeoLite2-City.mmdb和GeoLite2-Country.mmdb
GeoIP2支持库安装:
可以直接yum安装libmaxminddb,先查看说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
yum info 'libmaxminddb*' Name : libmaxminddb Arch : x86_64 Version : 1.2.0 Release : 6.el7 Size : 20 k Repo : base/7/x86_64 Summary : C library for the MaxMind DB file format URL : https://maxmind.github.io/libmaxminddb License : ASL 2.0 and BSD Description : The package contains libmaxminddb library. Name : libmaxminddb-devel Arch : x86_64 Version : 1.2.0 Release : 6.el7 Size : 32 k Repo : base/7/x86_64 Summary : Development header files for libmaxminddb URL : https://maxmind.github.io/libmaxminddb License : ASL 2.0 and BSD Description : The package contains development header files for the libmaxminddb library : and the mmdblookup utility which allows IP address lookup in a MaxMind DB file. |
安装GeoIP2支持库:
1 |
yum install libmaxminddb libmaxminddb-devel |
安装完成后系统增加一个mmdblookup命令,可以用于查看mmdb库的IP信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
mmdblookup -f /usr/share/GeoIP/GeoLite2-Country.mmdb -i 8.8.8.8 { "continent": { "code": "NA" <utf8_string> "geoname_id": 6255149 <uint32> "names": { "de": "Nordamerika" <utf8_string> "en": "North America" <utf8_string> "es": "Norteamérica" <utf8_string> "fr": "Amérique du Nord" <utf8_string> "ja": "北アメリカ" <utf8_string> "pt-BR": "América do Norte" <utf8_string> "ru": "Северная Америка" <utf8_string> "zh-CN": "北美洲" <utf8_string> } } "country": { "geoname_id": 6252001 <uint32> "iso_code": "US" <utf8_string> "names": { "de": "USA" <utf8_string> "en": "United States" <utf8_string> "es": "Estados Unidos" <utf8_string> "fr": "États-Unis" <utf8_string> "ja": "アメリカ合衆国" <utf8_string> "pt-BR": "Estados Unidos" <utf8_string> "ru": "США" <utf8_string> "zh-CN": "美国" <utf8_string> } } "registered_country": { "geoname_id": 6252001 <uint32> "iso_code": "US" <utf8_string> "names": { "de": "USA" <utf8_string> "en": "United States" <utf8_string> "es": "Estados Unidos" <utf8_string> "fr": "États-Unis" <utf8_string> "ja": "アメリカ合衆国" <utf8_string> "pt-BR": "Estados Unidos" <utf8_string> "ru": "США" <utf8_string> "zh-CN": "美国" <utf8_string> } } } |
也可以代码编译
1 2 3 4 5 6 7 8 9 |
cd /usr/local/src/ wget https://github.com/maxmind/libmaxminddb/releases/download/1.6.0/libmaxminddb-1.6.0.tar.gz tar -zxvf libmaxminddb-1.6.0.tar.gz cd libmaxminddb-1.6.0 ./configure make make install echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf ldconfig |
应该相当于yum install libmaxminddb libmaxminddb-devel,个人理解是相同的
Geolocate an IP address using Web Services with the client-side JavaScript | MaxMind Developer Portal
GeoIP2提供了多种语言的API接口供选择.
https://github.com/maxmind/libmaxminddb/releases
NGINX安装GeoIP2模块
1.yum安装的nginx
普通版没找到yum安装方法,plus版本有个插件官方https://docs.nginx.com/nginx/admin-guide/dynamic-modules/geoip2/
plus版本(收费或试用)https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-plus/
1 |
yum install nginx-plus-module-geoip2 |
如果有安装成功的,应该和geoip一样引入一下so文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
vi /etc/nginx/nginx.conf load_module /usr/lib64/nginx/modules/ngx_http_geoip2_module.so; load_module /usr/lib64/nginx/modules/ngx_stream_geoip2_module.so; http { ... geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { auto_reload 5m; $geoip2_metadata_country_build metadata build_epoch; $geoip2_data_country_code default=US source=$variable_with_ip country iso_code; $geoip2_data_country_name country names en; } geoip2 /etc//usr/share/GeoIP/GeoLite2-City.mmdb { $geoip2_data_city_name default=London city names en; } .... fastcgi_param COUNTRY_CODE $geoip2_data_country_code; fastcgi_param COUNTRY_NAME $geoip2_data_country_name; fastcgi_param CITY_NAME $geoip2_data_city_name; .... } stream { ... geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_data_country_code default=US source=$remote_addr country iso_code; } ... } |
2.编译安装:
https://github.com/leev/ngx_http_geoip2_module
1 2 3 4 |
cd /usr/local/src/ wget https://github.com/leev/ngx_http_geoip2_module/archive/master.tar.gz tar zxvf master.tar.gz mv ngx_http_geoip2_module-master /usr/local/src/ngx_http_geoip2_module |
然后找到nginx源码,省略号……代表以前编译过的模块
可以静态模块:
1 2 3 |
./configure …… --add-module=/usr/local/src/ngx_http_geoip2_module make make install |
也可以添加动态模块:
1 |
./configure …… --add-dynamic-module=/usr/local/src/ngx_http_geoip2_module |
如果需要流支持:
1 2 3 |
./configure …… --add-dynamic-module=/usr/local/src/ngx_http_geoip2_module --with-stream 或 ./configure …… --add-module=/usr/local/src/ngx_http_geoip2_module --with-stream |
nginx配置同上,只是不用写so引入就行了.
PHP安装GeoIP2模块
1.yum安装的php
yum可以先查看下说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
yum info 'php-maxmind*' Name : php-maxmind-db-reader Arch : noarch Version : 1.4.1 Release : 1.el7 Size : 20 k Repo : epel/x86_64 Summary : MaxMind DB Reader URL : https://github.com/maxmind/MaxMind-DB-Reader-php License : ASL 2.0 Description : MaxMind DB Reader PHP API. : : MaxMind DB is a binary file format that stores data indexed by : IP address subnets (IPv4 or IPv6). : : Databases are available in geolite2-country and geolite2-city packages. : : The extension available in php-maxminddb package allow better : performance. : : Autoloader: /usr/share/php/MaxMind/Db/Reader/autoload.php Name : php-maxminddb Arch : x86_64 Version : 1.4.1 Release : 1.el7 Size : 19 k Repo : epel/x86_64 Summary : MaxMind DB Reader extension URL : https://github.com/maxmind/MaxMind-DB-Reader-php License : ASL 2.0 Description : MaxMind DB is a binary file format that stores data indexed by : IP address subnets (IPv4 or IPv6). : : This optional PHP C Extension is a drop-in replacement for : MaxMind\Db\Reader. : : Databases are available in geolite2-country and geolite2-city packages. |
安装
1 |
yum install php-maxmind-db-reader php-maxminddb |
安装完成可以看下php示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
cat /usr/share/php/MaxMind/Db/Reader/autoload.php <?php // @codingStandardsIgnoreFile // @codeCoverageIgnoreStart require_once '/usr/share/php/Fedora/Autoloader'.'/autoload.php'; \Fedora\Autoloader\Autoload::addClassMap( array( 'maxmind\\db\\reader' => '/../Reader.php', 'maxmind\\db\\reader\\decoder' => '/Decoder.php', 'maxmind\\db\\reader\\invaliddatabaseexception' => '/InvalidDatabaseException.php', 'maxmind\\db\\reader\\metadata' => '/Metadata.php', 'maxmind\\db\\reader\\util' => '/Util.php', ), __DIR__ ); // @codeCoverageIgnoreEnd |
2.编译安装的php
可以用composer安装一下GeoIP2-PHP或DB-Reader-php
如何安装和使用PHP版GeoIP2-PHP:http://wiki.diahosting.com/amh4.2/geoip_for_geoip2_php
如何安装和使用PHP版的DB-Reader-php:http://wiki.diahosting.com/amh4.2/geoip_for_db_reader_php
3.nginx的fastcgi变量
和geoip的方法相同,就不多说了.
因为百度了不少教程和说明,结合自己操作整理的,所以有些可能乱或者不准,但是希望大家能理解使用方法就行,首先有IP库,不管是.dat还是.mmdb都是一个静态的二进制文件,这个文件可以放在任何地方,写对路径正常引用可读就行,下来就是安装支持库或者是api接口,让系统可以通过支持库或者接口解读IP库文件,最后就是装使用软件对应的插件,然后软件内引入插件指定好IP库位置(GeoIP和GeoIP2引入写法和变量不同),就可以正常使用了.