获取客户的国家的办法很多,类似于使用线上ip库或者直接下载一个ip库进行匹配,现在我们介绍的就是 GeoIP 配合对应的 web 服务器模块,比如:apache + mod_geoip 或者 nginx + http_geoip_module 等 获取客户的国家
安装 Nginx
因为要用到 http_geoip_module 模块,系统自带的 nginx 一般不带这个模块,所以要下载 nginx 源代码后自行编译
# wget http://nginx.org/download/nginx-0.9.6.tar.gz
# tar zxvf nginx-0.9.6.tar.gz
# cd nginx-0.9.6
# ./configure --without-http_empty_gif_module --with-poll_module \
--with-http_stub_status_module --with-http_ssl_module \
--with-http_geoip_module
# make; make install
安装 MaxMind 的 GeoIP 库
MaxMind 提供了免费的 IP 地域数据库(GeoIP.dat),不过这个数据库文件是二进制的,需要用 GeoIP 库来读取,所以除了要下载 GeoIP.dat 文件外(见下一步),还需要安装能读取这个文件的库
# wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
# tar -zxvf GeoIP.tar.gz
# cd GeoIP-1.4.6
# ./configure
# make; make install
刚才安装的库自动安装到 /usr/local/lib 下,所以这个目录需要加到动态链接配置里面以便运行相关程序的时候能自动绑定到这个 GeoIP 库:
# echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf
# ldconfig
下载 IP 数据库
MaxMind 提供了免费的 IP 地域数据库,这个数据库是二进制的,不能用文本编辑器打开,需要上面的 GeoIP 库来读取
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
# gunzip GeoIP.dat.gz
配置 Nginx
最后是配置 nginx,在相关地方加上如下的配置就可以了
# vi /etc/nginx/nginx.conf
http {
...
geoip_country /home/abc/GeoIP.dat;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
...
}
server {
...
location / {
root /home/abc/www;
if ($geoip_country_code = CN) {
root /home/abc/cn;
}
...
}
...
}
配置 nginx后,重启nginx后,可通过
echo $_SERVER;
查看是否有GEOIP_COUNTRY_CODE常量
在需要获取国家的代码里,输出
echo $_SERVER['GEOIP_COUNTRY_CODE'];
即可获取到对应的国家简码