3

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

目前我正在使用免费的 maxmind GeoIp 和 php 重定向流量。

但是我认为每天有 40k 的独立用户,并且每天大约有 100k 的请求,这将是非常缓慢的。

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

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

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

请帮我决定!!感谢一切!

4

2 回答 2

1

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

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

下一步是使用国家代码 cookie。如果用户已经拥有 cookie,则使用它来切换到特定于国家/地区的代码,否则访问 GeoIP DB 以确定国家/地区代码,设置 cookie,然后像往常一样切换(即使用户不接受 cookie 也可以工作) . 将其设为会话 cookie,用户可能会出差。如果您有一些页面缓存,请小心:它不能忽略国家代码 cookie。

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

于 2012-06-16T22:58:35.670 回答
1

好吧,我认为您太担心了,但让我解释一下:

  1. IP -> country 是一个哈希表,所以我希望很短的时间来解决您的查询
  2. 是静态信息,解析后可以缓存
  3. 100k 页面浏览量和 40k 用户意味着每 2.5 个页面浏览量有 1 个用户,“短”的导航历史(我稍后解释)

对于这种情况,我建议:

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

附言

如果您要集群 $_SESSION 共享将是真正的挑战,因此您可以从现在开始查看会话管理器

于 2012-06-17T00:02:08.950 回答