2015-06-23 111 views
1

我被要求阻止访问某个网站。 有两种方法,我知道我可以选择 - 1.在Apache的水平(这样的工具:http://www.ip2location.com/blockvisitorsbycountry.aspx),其生成与IP范围列表很长的htaccess文件。 我知道的另一种方式是使用PHP(无论是本地数据库,远程web服务还是仅仅像htaccess一样的列表)。 我的问题是什么更有效 - 我认为,如果我使用apache,它比PHP更快,但每个页面都被访问。 如果我使用PHP,我可以做一次并保存在会话中。 什么是更有效的方法? 谢谢!阻止国家的最佳途径

+0

清楚,有点意思,好事的琐碎绕过 –

+0

@Dagon - 我同意这不是做的最好的事情,这是很容易得到解决。 – Yanipan

回答

3

您不必填写你的.htaccess文件与成千上万的IP地址的行。相反,你可以安装一个C库和一个Apache模块来完成繁重的工作。

MaxMind提供了通常用于IP查找一个流行的免费数据库。他们的GeoLite2是一个免费的数据库,每月更新一次。如果您需要的话,他们的付费产品更准确,更新频率更高。

通过使用此数据库并安装它们的各种APIs之一,您可以在您认为合适处理流量。

出于我们的目的,您需要安装C库API以及Apache模块。一旦那些正在和启用,将数据库文件的地方,然后你就可以建立与代码的国家集团,因为这在简单的.htaccessApache config file

MaxMindDBEnable On 
MaxMindDBFile DB /path/to/GeoIP/GeoLite2-Country.mmdb 
MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code 

SetEnvIf MM_COUNTRY_CODE ^(RU|DE|FR) BlockCountry 
Deny from env=BlockCountry 

这将阻止俄罗斯,德国和法国。在这里获取双字母ISO国家代码。

这将超过您的服务器更好不必解析数以千计的文本行对.htaccess文件中的每个请求!

您确实需要高级访问您的服务器上安装该库和模块,所以这是对共享主机或者你没有一个VPS这样的访问没有好。

如果出于某种原因,您希望在文件夹级别使用特定的阻止规则,这也会起作用。

Nice Article/Reference

+0

如果我可能会提出一个关于您的答案的问题 - 这是否意味着使用PHP +会话更有效?基本上我仍然会浏览大型数据库,无论是在.htaccess文件还是在外部文件中。 谢谢 – Yanipan

+0

看到他们是不同的方式来实现你要找的东西,但我想上面的答案是最适合我的,我用MAXMind DB,它真的很不错 –