哪个是按国家/地区重定向用户的最佳可扩展方式?

时间:2012-06-16 05:08:07

标签: php linux .htaccess redirect country

我有一个网站,在几个月内将有来自不同国家的流量, 但这取决于我应该展示哪个网站的国家。

目前我使用免费的maxmind GeoIp重定向流量, 用PHP。

但我认为每天有40k个独立用户,而且每天要求100k,这将是非常缓慢的。

我想过用.htaccess做这件事,但我认为请求时间会多一点。

我现在最后的想法是根据国家/地区的不同文件夹(或子域)在网站的html中构建主页,例如us.website.com并将用户重定向到那里,但我不知道哪个是方式是用户体验最快的方式。

服务器是LAMP(我可以选择发行版)

请帮我决定!! 谢谢你的一切!

2 个答案:

答案 0 :(得分:1)

从PHP访问时,下载的MaxMind GeoIP国家数据库(免费或付费,没有区别)非常快(即使他们的PHP代码没有经过优化 - 很明显很好地从良好的C代码翻译而来)。

只需将它放在您的机器上(例如,通过两次调用microtime(true)与现实数据集的差异),您可能会发现您可以负担得起访问代码顶部的GeoIP数据库,以便在需要时切换到特定国家/地区的代码。

下一步是使用国家/地区代码Cookie。如果用户已经拥有cookie,请使用它来切换到特定国家/地区的代码,否则访问GeoIP数据库以确定国家/地区代码,设置cookie并像往常一样切换(即使用户不接受cookie也能正常工作) 。使其成为会话cookie,用户可能会旅行。如果您有一些页面缓存,请务必小心:它不能忽略国家/地区代码cookie。

您的问题提到了重定向,可能是特定国家/地区的header('Location: ...');,但您可能不这样做,因为它会使事情变得更复杂,并且会增加您的流量。

答案 1 :(得分:1)

那么, 我觉得你太担心了,但让我解释一下:

  1. IP - > country是一个哈希表,所以我希望有很短的时间来解决您的查询
  2. 这是一个静态信息,一旦解析就可以缓存
  3. 100k页面视图,40k用户意味着每2.5页视图1个用户,“短”导航历史(我稍后会解释)
  4. 对于这种情况,我建议:

    1. 使用PHP查询数据库(将代码放在执行的“头部”)并将国家/地区存储/缓存在Cookie 中并提供请求。一个简单的 if(空($ COOKIE ['country']))将允许理解是否查询数据库
    2. 避免重定向到其他网站(us.domain.com),您将从每个用户2.5到3.5个请求(约40%以上)传递
    3. 当网站需要更多资源时,您可以添加增加云资源或添加具有相同地址的新计算机(www.domain.com),但新IP执行DNS循环,可以很好地使用短导航历史记录。
    4. PS

      如果你要集群$ _SESSION分享将是真正的挑战,所以你现在可以看看会话管理器