【发布时间】:2011-12-21 05:17:00
【问题描述】:
我有一些针对我的网站的不良机器人,我需要动态处理这些机器人所来自的 IP 地址。这是一个非常高流量的网站,我们每天获得数百万的网页浏览量,这就是我们使用 4 台服务器(负载均衡)的原因。我们不使用任何缓存(资产除外),因为我们的大多数响应都是独一无二的。
从代码技术上讲,它是一个非常小的 PHP 网站,它不进行数据库查询,并且每次浏览量都需要一个 XML 请求。 XML 请求得到一个非常快速的响应。
我开发了一个脚本来(非常频繁地)分析哪些 IP 地址正在执行滥用请求,并且我想在一段时间内以不同的方式处理来自这些 IP 的请求。滥用的 IP 变化很大,所以我需要每隔几分钟屏蔽不同的 IP
所以:我看到 IP xx.xx.xx.xx 存在滥用行为,我将其记录在某处,然后我想在接下来的 x 分钟内对该 IP 进行特殊处理。我需要快速执行此操作,因为我不想降低服务器速度并让合法用户为此受苦。
解决方案 1:文件
将滥用 IP 写在一个文件中,然后为每个请求读取该文件似乎 太慢了。你同意吗?
解决方案 2:PHP 包含
我可以让我的分析脚本编写一个 PHP 包含文件,然后 PHP 引擎将为每个请求包含该文件。但是:我可以想象,在编写 PHP 文件时,很多用户正确地执行请求,然后因为文件正在被使用而得到错误。
我可以通过编写文件然后进行符号链接更改来解决这个潜在问题(这可能会更快)。
解决方案 3:htaccess
另一种区分滥用者的方法是编写一个阻止或重定向它们的 htacces。这可能是最有效的方法,但我需要每 x 分钟编写一个 htaccess 文件。
我很想听听关于我提出的解决方案的一些想法/反应,尤其是关于速度方面。
【问题讨论】:
-
同意你的 3 个解决方案。我想还有第四个:我正在使用 iptables 和 fail2ban 而不是服务器 php 响应来处理这个问题,但没有对这两种解决方案的速度进行基准测试。您提到的另一个可行的解决方案是在您的服务器 vhost 中使用“包含 /etc/apache2/extra/redirecting_rules”;我也没有对那个进行基准测试,但由于系统需要文件访问,它可能会更慢。
-
.htaccess 无法缩放
标签: php performance apache