1 Nginx的geoip模块
1.1 模块名称
ngx_http_geoip_module
1.2 模块指令
– geoip_country
– geoip_city
– geoip_proxy
– geoip_proxy_recursive
1.2.1 geoip_country指令
1.2.1.1 指令的使用
语 法:geoip_country file;
默认值:-
上下文:http
注:该指令会根据客户端IP地址确认国家
1.2.1.2 改指令支持的变量
$geoip_country_code
以上变量值是根据客户端IP地址计算出国家的代码(双字母)
例如,”CN”,”RU”,”US”
$geoip_country_code3
以上变量值是根据客户端IP地址计算出国家的代码(三字母)
例如,”CHN”,”RUS”,”USA”
$geoip_country_name
以上变量值是根据客户端IP地址计算出国名
例如,”China”,”Russian Federation”,”United States”
1.2.2 geoip_city指令
1.2.2.1 指令的使用
语 法:geoip_city file;
默认值:-
上下文:http
注:该指令会是根据客户端IP地址确认国家,地区和城市
1.2.2.2 改指令支持的变量
$geoip_area_code
以上变量值是根据客户端IP地址计算出电话区号(仅限美国)
注:已经过期,不建议使用
$geoip_city_continent_code
以上变量值是根据客户端IP地址计算出大陆代码(continent code)
例如,”AS”,”EU”,”NA”
$geoip_city_country_code
以上变量值是根据客户端IP地址计算出国家的代码(双字母)
例如,”CN”,”RU”,”US”
$geoip_city_country_code3
以上变量值是根据客户端IP地址计算出国家的代码(三字母)
例如,”CHN”,”RUS”,”USA”
$geoip_city_country_name
以上变量值是根据客户端IP地址计算出国名
例如,”China”,”Russian Federation”,”United States”
$geoip_dma_code
以上变量值是根据客户端IP地址计算出Google AdWords API中的地理位置(DMA地区代码,也称城市代码)
例如,”Dongguan”
$geoip_latitude
以上变量值是根据客户端IP地址计算出纬度
$geoip_longitude
以上变量值是根据客户端IP地址计算出经度
$geoip_region
以上变量值是根据客户端IP地址计算出国家地区代码(两个符号)
例如,”48″,”DC”
$geoip_region_name
以上变量值是根据客户端IP地址计算出国家地区名称
例如,”Moscow City”,”District of Columbia”
$geoip_city
以上变量值是根据客户端IP地址计算出城市名称
例如,”Dongguan”,”Moscow”,”Washington”
$geoip_postal_code
以上变量值是根据客户端IP地址计算出邮政编码
1.2.3 geoip_org指令
1.2.3.1 指令的使用
语 法:geoip_org file;
默认值:-
上下文:http
支持版:1.0.3版
注:该指令会是根据客户端IP地址确认组织
1.2.3.2 改指令支持的变量
$geoip_org
以上变量值是根据客户端IP地址计算出组织名称
例如,“The University of Melbourne”
1.2.4 geoip_proxy指令
1.2.4.1 指令的使用
语 法:geoip_proxy address | CIDR;
默认值:-
上下文:http
支持版:1.3.0和1.2.1版
– 适合使用代理的环境
– 当请求的客户端来自一台可信的代理服务器IP地址时
– 地址重”X-Forwarded-For”取得真实的客户端IP地址
1.2.5 geoip_proxy_recursive指令
1.2.5.1 指令的使用
语 法:geoip_proxy_recursive on | off;
默认值:-
上下文:http
支持版:1.3.0和1.2.1版
– 禁用递归,则使用”X-Forwarded-For”发送的最后地址
– 启用递归,则使用”X-Forwarded-For”发送的不可信最后地址
2 安装配置Nginx
2.1 基础配置
2.1.1 环境信息
IP Address=10.168.0.51
HostName=geoip.cmdschool.org
OS=CentOS 7.3
配置geoip自动更新服务
https://www.cmdschool.org/archives/1034
2.1.2 yum源配置
yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2.1.3 安装相关包
yum install -y nginx-module-geoip
2.1.4 启动并配置自启用
systemctl start nginx systemctl enable nginx
2.2 启用模块
2.2.1 配置文件加载模块
vim /etc/nginx/nginx.conf
加入load_module行:
[...] load_module /usr/lib64/nginx/modules/ngx_http_geoip_module.so; [...] http { [...] }
2.2.2 测试配置
nginx -t
2.2.3 重启使模块生效
systemctl restart nginx
2.3 加载GeoIP库
2.3.1 修改配置文件
vim /etc/nginx/conf.d/www.cmdschool.org.conf
加入如下配置:
geoip_country /data/geoip/GeoLiteCountry.dat; geoip_city /data/geoip/GeoLiteCity.dat; server { listen 80; server_name www.cmdschool.org; location / { root /var/www/www.cmdschool.org; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } if ( $geoip_city_country_code ~* HK ){ return 301 http://hk.cmdschool.org$request_uri; break; } if ( $geoip_country_code ~* CN ){ return 301 http://cn.cmdschool.org$request_uri; break; } if ( $geoip_country_code ~* US ){ return 301 http://us.cmdschool.org$request_uri; break; } }
注:如果没有适配的跳转,则默认访问到,
http://www.cmdschool.org
2.3.1 重启使配置生效
systemctl restart nginx
注:请根据实际需求选取合适的变量做判断,此处不再累述。
2.3.2 测试访问
使用不同地区的浏览器访问,
http://www.cmdschool.org
如果你的客户端的IP地址是中国的IP,页面会跳转到,
http://cn.cmdschool.org
参阅文档:
===============================
官方模块文档
———–
http://nginx.org/en/docs/http/ngx_http_geoip_module.html#example
使用范例参考
———–
http://blog.51cto.com/laoxu/1414561
国家名称或地区参考
—————-
https://developers.google.com/adwords/api/docs/appendix/geotargeting#dma
没有评论