nginx geoip

nginx自带geoip模块
如果你的版本没有,请安装
更新Apt source list
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
安装 Nginx 和 Geoip 模块
$ sudo apt-get install nginx
$ sudo apt-get install nginx-module-geoip
下载 Geoip City 数据文件,解压,复制到 /etc/nginx/geoip 备用
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gzip -d -k GeoLiteCity.dat.gz
$ sudo mkdir /etc/nginx/geoip
$ sudo cp GeoLiteCity.dat /etc/nginx/geoip
配置 Nginx,实现 Geoip 根据IP识别城市,并跳转不同页面的功能
1. 在 nginx.conf 中设置 Geoip City 数据库入口
$ sudo vi /etc/nginx/nginx.conf

在 http 里面添加下面代码:
geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
请留意位置一定要在最后两个 include 前面,如下图所示。

2. 配置 default 文件
sudo vi /etc/nginx/sites-available/default

在location中增加以下代码:
set $flag 0;
if ( $http_user_agent ~ "(baidu.Transcoder)|(mini)|(Android)|(blackberry)|(googlebot-mobile)|(iemobile)|(Mobile)|(ipad)|(iphone)|(ipod)|(opera mobile)|(palmos)|(webos)|(ucweb)|(Windows Phone)|(Symbian)|(hpwOS)" ) {
set $flag "${flag}1";
}

if ($geoip_city_country_code = "CN") {
set $flag "${flag}2";
}

if ($geoip_region_name ~ "(Beijing|Shanghai)") {
set $flag "${flag}3";
}

if ($geoip_region_name ~ "(Guangdong)") {
set $flag "${flag}4";
}

if ($geoip_city ~ "(Guangzhou|Shenzhen)") {
set $flag "${flag}5";
}

# The ip in China but not in Beijing Shanghai Guangdong
if ($flag = "012") {
set $flag 1;
}

# The ip in China Guangdong but not in Guangzhou Shenzhen
if ($flag = "0124") {
set $flag 1;
}

if ($flag = "1") {
root /home/ubuntu/www/your/dir;
}

这样就实现了根据手机还是PC,以及根据城市来分配页面的功能。
参考链接:
利用Nginx加GeoIP MaxMind数据库获取用户的地理位置:http://blog.csdn.net/chszs/article/details/76376760?locationNum=10&fps=1
nginx geoip 模块实现地区性负载均衡:http://blog.csdn.net/yongche_shi/article/details/51898249
使用 Nginx 和 GeoIP 模块来处理不同国家的访问:http://onlyzq.blog.51cto.com/1228/533162

点赞