根据业务需要,应用需要对境内外不同用户群体采取不同浏览策略,我们首先想到的是动态获取ip所在地进行分析,然后用不同的逻辑处理,所以选用了淘宝的ip地址库:
接口说明
1. 请求接口(GET):
http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
{“code”:0,”data”:{“ip”:”210.75.225.254”,”country”:”\u4e2d\u56fd”,”area”:”\u534e\u5317”,
“region”:”\u5317\u4eac\u5e02”,”city”:”\u5317\u4eac\u5e02”,”county”:””,”isp”:”\u7535\u4fe1”,
“country_id”:”86”,”area_id”:”100000”,”region_id”:”110000”,”city_id”:”110000”,
“county_id”:”-1”,”isp_id”:”100017”}}
其中code的值的含义为,0:成功,1:失败。
服务是免费的,但访问频率只能小于1QPS,拿来娱乐还可以,商用就不灵了,看了其他收费的ip地址查询接口都觉得费用不合理,考虑购买ip地址库自己做查询接口,最后发现阿里云有免费的域名智能解析功能:
1 . 传统DNS解析示例
例如域名www.dns-example.com,有三台服务器,分别是联通IP,移动IP,电信IP,DNS解析配置如下:
- 将域名 指向 联通IP地址 (1.1.1.1)
- 将域名 指向 移动IP地址 (2.2.2.2)
- 将域名 指向 电信IP地址 (3.3.3.3)
可实现的解析效果:
传统DNS解析不判断访问者的来源,会将1.1.1.1、2.2.2.2、3.3.3.3三个地址全部返回给访问者的本地DNS,由访问者的本地DNS通过随机或者优选的方式将其中一个IP地址返回给访问者,传统DNS解析有可能会造成访问者跨网访问。
2 . 智能DNS解析示例
例如域名www.dns-example.com,有三台服务器,分别是联通IP,移动IP,电信IP,DNS解析配置如下:
- 解析线路配置 默认线路 指向 联通IP地址 (1.1.1.1)
- 解析线路配置 移动线路 指向 移动IP地址 (2.2.2.2)
- 解析线路配置 电信线路 指向 电信IP地址 (3.3.3.3)
可实现的解析效果
云解析会判断访问者的来源,为来源于移动运营商的访问者云解析返回2.2.2.2的解析地址,为来源于电信运营商的访问者云解析返回3.3.3.3的解析地址,其他来源的访问者云解析返回1.1.1.1的解析地址
除移动联通电信外,还有针对境内外、搜索引擎的智能解析。
这样可以把同一个域名分默认和境外两条线路来做智能解析,可以分别指向两台服务器,或者境外线路指向指定的CNAME,用nginx判断server_name做业务处理,这样可以零延迟判断用户是否是境外用户。
扩展应用
cloudflare是很好的cdn厂商,但对境内用户并不友好(其实应该说境内环境对他不太友好),延迟很高,但境外加速非常好,如果网站有对外业务,可以选择智能解析,对境内外用户指定不同CDN厂商,加快访问,节约开支。