通过php或apache禁止用户ip

时间:2015-03-20 17:48:13

标签: php mysql apache

我们的应用程序使用MySQL来存储每个被禁止的IP。 触发某些事件时会自动禁用IP,并将它们添加到表bans中一段时间​​。该表是MyISAM,但很少有IP被禁止。

在玩家发出的每个请求中,我们验证他的IP是否属于被禁止的IP列表,以及他的暂停是否有效。因此,有时这涉及无用的DB请求,这会影响应用程序的响应时间。

我们想知道它是不是更好的选择使用APACHE并写入文件每个被禁止的IP,而不是执行SQL查询来验证每个访问者的IP是否在标题IP列表中。

更大的应用程序如何处理数百或数千个被禁用的IP并且许多用户处于活动状态?他们使用数据库还是文件写作?

2 个答案:

答案 0 :(得分:3)

具有合适索引的数据库将比基于文件的简单解决方案快得多。如果您的响应时间受此查询的影响,则代码和/或数据库结构会出现问题。如果您需要有关此方面的帮助,请在此处或最好在codereview上将您当前的代码发布到新问题中。

话虽如此,根据您对这些被禁用用户的要求,您可以查看iptables,这将阻止他们访问您的Web服务器,从而无需查询。有几个库浮动,为此提供了一个PHP接口。谷歌“PHP iptables”了解更多信息。

答案 1 :(得分:1)

如果认为你最终会禁止成千上万的IP。然后你必须使用数据库来提高速度。但如果认为任何时候不超过10-20 IP被禁止,你可以选择写入文件。只有在没有太多IP的情况下,禁止Apache才会很快。通常,用于验证IP的自定义编写功能在搜索大量IP时不够快于数据库。我正在讨论整个系统资源的使用情况。但是如果你不担心吃掉数据库以外的其他资源,那么只能写入文件是合理的。

相关问题