如何根据用户的当前位置将用户重定向到子域?

时间:2012-01-05 01:53:33

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 geolocation

我正在使用Rails 3.1.1,我想将用户(例如,从美国)重定向到正确的子域us.site.com(这个用户与site.com托管在同一服务器上)。我知道我可以通过他/她的IP地址来定位用户,但是我该怎么做才能将他/她重定向到正确的子域?有一种技术/宝石可以对用户IP进行地理定位,然后处理重定向吗?

P.S。:可能,出于性能原因,我应该使用中间件......

2 个答案:

答案 0 :(得分:1)

我过去愉快地使用的一种方法是在用户连接到服务之前通过DNS 执行地理位置查找;通过这种方式,它们可以自动连接到离它们最近的服务器,您可以获得便宜且轻松的负载平衡,并可以根据需要将服务器从主动使用中删除,并且各个站点可以在不影响其他站点的情况下停机。

OFTC使用自编oftcdns工具为用户提供最近的服务器。在我担任OFTC网络管理员期间,这个工具比运行更简单的基于Bind的DNS服务器有了显着的改进,该服务器不提供地理位置功能,并且使服务器进出旋转变得复杂。

维基百科使用PowerDNS with a geobackend来提供他们的地理IP服务。 PowerDNS绝对是经过良好测试,高需求的工具。

答案 1 :(得分:1)

https://rubygems.org/gems/rack-geoipcity是我发布的机架中间件宝石,您可以使用它,或者只是在控制器中使用GeoIP宝石。

使用rack-geoipcity,您可以查询它添加的X-header并根据它进行决策。类似的东西:

if headers['X_GEOIP_COUNTRY_CODE'] == "IN"
  redirect "/india"
end

虽然我目前没有使用Rails,但可能会略有不同。

There are plenty to choose from如果您不想使用MaxMind数据库。