我有一个网站,假设它是 www.site.com/(ASP NET MVC,但这并不重要)我还有另一个网站,假设它是 www.secondsite.vi/(它在越南托管)。网站的结构相同,数据库中的数据不同。
我想做以下事情:用户导航到 www.site.com/。如果他的 IP 地址是越南语,那么他将被带到 www.secondsite.vi/(但在 URL 栏中他仍然看到 www.site.com/)否则他将被带到 www.site.com/。此外,当用户从越南输入 www.site.com/ 时,他的请求不应到达主站点的托管(ping 时间太长)
您能建议一下如何做到这一点吗?做这些事情的最佳实践是什么?我听说可以使用 Amazon Route 53 来实现这一点。如果可以,我应该怎么做才能将两个站点都添加到其中并拆分 IP 地址或地理信息范围?提前致谢!
答案1
1. route53-geo
据我所知,AWS 路由 53 目前不支持地理 DNS(但考虑到他们一直在推出新功能,这可能已经过时了!)
http://www.dnscomparison.com/route53.html “目前不支持地理 DNS 服务,但未来似乎会添加对此服务的支持。您可以将 Route 53 DNS 服务与任何其他 Amazon Web 服务集成。”
AWS 支持表示该功能是重中之重,即将推出(大约在 2011 年...); https://forums.aws.amazon.com/thread.jspa?threadID=75241
2. mod_geoip
如果你使用的是 apache2/linux,你可以安装mod_geoip2 等工具根据客户端 IP 地址将用户重定向回所需的地理实例。
这个 stackoverflow问题有一个例子,展示了如何匹配某个区域,并使用 302 重定向将用户发送到另一个站点;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^VN$
RewriteRule ^$ http://www.secondsite.vi/$1 [L,NC,QSA]
然后将非越南来源 IP 访问者反弹回另一台服务器配置上的美国托管站点;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^VN$
RewriteRule ^$ http://www.site.com/$1 [L,NC,QSA]
虽然在您的场景中,如果您的链接速度非常慢,那么联系美国服务器可能是不可取的,但实际上对“/”的 GET 请求实际上只有少量的请求和响应数据(每个方向 200-300 字节) - 刚好够用于“位置:http://www.secondsite.vi“301 重定向和其他响应标头。事实上,您可以修改上面的节以删除另一端的另一个重定向,方法是像这样精确指定“主页”;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^VN$
RewriteRule ^$ http://www.secondsite.vi/index.html [L,NC,QSA]
页面中的 html 由http://www.secondsite.vi/index.html,拥有正确的服务器基础,http://www.secondsite.vi/那么所有剩余的流量都不会流向美国。
3.有一些商业Geo-DNS服务提供商;
一般来说,你定义一堆区域,并且根据原始客户端 IP 提供 A、CNAME 记录;
http://www.geoscaling.com/
http://dyn.com/dns/dynect-managed-dns/
http://www.dnsmadeeasy.com/services/global-traffic-director/
http://www.zerigo.com/news/launch-of-geodns-geolocation-load-balancing
(我个人没有使用过其中任何一项,但我确实根据之前的需求查看过这些服务,所以我很想知道它们对你的作用如何)
4. 运行您自己的地理感知名称服务器
您显然会遇到与缓存有关的问题,并需要物理地正确定位您的 DNS 服务器。(因此,只有当您遇到特殊情况时,才会采用此解决方案)
但是,您可以安装绑定 DNS 服务器(或 dnsmasq 等)的扩展,以便能够通过地理感知为您自己的 DNS 记录提供服务;
“如何使用 BIND 和 MaxMind 实现 GeoDNS” http://phix.me/geodns/
答案2
好吧,我建议使用 CDN 而不是 Geocast IP。例如,法国的 OVH 每月提供 10 欧元的专用 IP(因此您始终为 DNS 提供相同的 A 字段),但他们在世界各地拥有多台服务器,它会自动将您的亚洲访客链接到最近的 CDN。
您有 10 个后端,这意味着您最多可以提供 10 台服务器,并且本地 CDN 将转到最快的可用后端,因此您可以在不同的后端输入您的美国服务器和越南服务器,而您的越南访问者将始终访问最快的服务器。
如果您不想这样做,我建议您使用 DNS Made Easy,但不是像 Global Traffic Director 这样的“大优惠”,而是他们最小的优惠(小型企业,每年 29.95 美元),但带有“DNS FailOver”选项(每年 4.95 美元),可始终监控最多 5 个后端服务器。您可以说,如果一个后端需要超过 1 秒的时间来响应您的客户端,那么它会自动转到第二个后端,因此,如果您的越南服务器比您的美国服务器响应速度最快,它将被选择来响应您的越南访客。