不同国家访问同一网站,从不同的服务器获取不同资源
场景说明
这种情况还是有点蛋疼的,需要是不同地区访问同一个网站,这时候根据访问者的实际情况,去加载对应的资源(不同地区需要用的资源还不一样);
下面是两种常见的场景和解决方案
不同国家访问一个网站,加载相同资源
如果是不同国家,访问同一网站,想用相同的资源,那么可以使用阿里云的 CDN 服务来解决,地区选择全球加速,亲测效果还是很不错的!
使用这种方案,需要了解下 阿里云的CDN更新和预热机制,可以参考我的另一篇博文:阿里云 CDN 静态文件不回源更新的解决方法 这事我在这种情况的解决思路
不同国家访问域名,展现不同的网站
这种方案也好做,可以通过用户的语言环境来自动跳转到不同的网站;
比如我在搞一个网站:https://www.gopekka.com/
这个就是这种场景的,具体解决办法,可以参考我的博文:前端 JS 获取用户浏览器默认语言设置,自动判断跳转不同网站
当前场景的解决思路
这个类似前面两种的结合,适应中小型的网站,如果很大了,或者业务比较复杂,就不能这么干了,否则维护起来太蛋疼了 !
方法一:通过判断用户语言来解决
var language = localStorage.getItem('locale') || window.navigator.language.toLowerCase() || 'en';
var baseUrlVal = ''
localStorage.setItem('locale', language)
if (language.indexOf("zh-cn") !== -1) {
baseUrlVal = 'https://xxxxx-public.oss-cn-hangzhou.aliyuncs.com/xxxx'
} else if (language.indexOf('en') !== -1) {
baseUrlVal = 'https://xxxxx-public-gg.oss-us-west-1.aliyuncs.com/xxxx'
} else {
baseUrlVal = 'https://xxxxx-public-hk.oss-cn-hongkong.aliyuncs.com/xxxx'
}
根据用户环境判断,会导致一个情况:中国大陆内的用户,设置英文为首选语言,那么访问网站会被移到对应的英文网站,这样的处理也是合理的,毕竟用户确实是想阅读英文网站的;
方法二:通过判断用户
可以通过获取用户的 IP,然后把 IP 放到 IP 库里查询所在地,从而加载对应的资源,这样的方案回更加准确!有的第三方会直接返回所在国家的编码,比如 cn / en 等就更好了
但是这样的方案也有一个弊端:如果用户通过科学上网,全局模式下,会被认为属于美国 / 日本等等(看梯子的 IP 而定了),那么会导致访问非常慢;但是这种偏差,很多翻墙的人都是了解的,没人会故意用美国的 IP 访问国内的淘宝 / 百度等网站的,除非是忘记切换回来了;
IP 判断
市场上有很多 IP 判断的,拿 IP 倒是非常好做的一件事;比如我现在可以拿到用户访问本网站时候的 IP;
如下: