Php 哪一种是按国家重定向用户的最佳可扩展方式?
我有一个网站,几个月后会有来自不同国家的流量, 但这取决于我应该展示哪个国家的网站 目前我正在使用免费的maxmind GeoIp重定向流量, 使用php 但我认为,如果一天有4万个独立用户,一天大约有10万个请求,这将非常缓慢 我曾考虑使用.htaccess进行此操作,但我认为请求时间将需要更长一点 我现在的最后一个想法是根据不同的国家在不同的文件夹(或子域)中建立网站的html主页,如us.website.com,并将用户重定向到那里,但我不知道哪种方式对用户体验最快 服务器是LAMP(我可以选择发行版) 请帮我决定!!Php 哪一种是按国家重定向用户的最佳可扩展方式?,php,linux,.htaccess,redirect,country,Php,Linux,.htaccess,Redirect,Country,我有一个网站,几个月后会有来自不同国家的流量, 但这取决于我应该展示哪个国家的网站 目前我正在使用免费的maxmind GeoIp重定向流量, 使用php 但我认为,如果一天有4万个独立用户,一天大约有10万个请求,这将非常缓慢 我曾考虑使用.htaccess进行此操作,但我认为请求时间将需要更长一点 我现在的最后一个想法是根据不同的国家在不同的文件夹(或子域)中建立网站的html主页,如us.website.com,并将用户重定向到那里,但我不知道哪种方式对用户体验最快 服务器是LAMP(我可
谢谢你所做的一切 从PHP访问下载的MaxMind GeoIP国家/地区数据库(免费或付费,没有区别)时速度非常快(即使他们的PHP代码没有经过优化-很明显,它是从优秀的C代码翻译过来的) 只需在您的计算机上计时(例如,通过两次调用
microtime(true)
和一个真实的数据集的差异),您可能会发现您可以在代码顶部访问GeoIP数据库,以便在需要时切换到特定于国家/地区的代码
下一步是使用国家代码cookie。如果用户已经拥有cookie,则使用该cookie切换到特定于国家/地区的代码,否则访问GeoIP DB以确定国家/地区代码,设置cookie,并按常规切换(即使用户不接受cookie也有效)。将其设置为会话cookie,用户可能会旅行。如果您有一些页面缓存,请小心:它不能忽略国家代码cookie
您的问题提到一个重定向,它可能是特定于国家的标题('Location:…')代码>,但您可能不需要它,因为它会使事情变得更加复杂,并增加您的流量。好吧,
我觉得你太担心了,但让我解释一下:
IP->country是一个哈希表,所以我希望很快就能解决您的查询
这是一个静态信息,一旦解析就可以缓存
100k页面视图和40k用户意味着每2.5个页面视图中有1个用户,“短”导航历史(我稍后解释)
对于这种情况,我建议:
使用PHP查询数据库(将代码放在执行的“头”中),并将国家/地区存储/缓存在cookie中,并为请求提供服务。一个简单的if(空($COOKIE['country'])将允许理解是否查询数据库
避免重定向到其他站点(us.domain.com),每个用户将传递2.5到3.5个请求(大约多40%)
当站点需要更多资源时,您可以添加更多的云资源,或者添加一台具有相同地址(www.domain.com)但具有新IP的新机器进行DNS循环,在导航历史较短的情况下运行良好李>
PS
如果您要群集$\u,会话共享将是真正的挑战,因此您可以从现在开始查看会话管理器为不同国家/地区提供不同站点的原因是什么?这只是语言吗?如果是这样,则可以在标题中找到,不需要查找。此外,如果你使用他们推荐的方法,MaxMind的数据库也不会太慢。这是因为网站上的广告、链接和一些专门为每个国家定制的信息=)啊,是的,你肯定会想做IP检测。我建议你继续使用你的免费数据库。他们有一个国家版本,更轻。但这将是足够快的流量10万或100万的要求?你没有太多的选择。它的速度取决于您的服务器配置。幸运的是,它是非常可伸缩的,因为数据几乎是静态的。MaxMind的GeoIP DB不是哈希表,它是一个Ehm,我并不是说GeoIP DB的真正实现是一个哈希表,而是说数据本身“是”一个哈希表,所以我认为实际实现的性能与哈希表实现相差不远,也许你的意思是数据本身就是一个映射。不过,该映射作为前缀树(即trie)实现比作为哈希表实现要好得多。对不起,我坚持使用术语,只是我认为对事物使用正确的名称很重要(一般而言)。顺便说一句,我应该纠正我的第一个评论:我应该写“哈希表”,而不是“哈希”…不,你说得对,术语真的很重要。我根本不在乎GeoIP数据库中的算法是什么(我的错),因为Saikios别无选择,他必须为每个用户查询数据库一次,所以这是一个我们可以忘记的问题,当然,如果我们缓存结果;)