Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在realtime-PHP-tail中识别一个scraper来访问内存中的文件 背景_Php_Linux_Memory_Nginx - Fatal编程技术网

在realtime-PHP-tail中识别一个scraper来访问内存中的文件 背景

在realtime-PHP-tail中识别一个scraper来访问内存中的文件 背景,php,linux,memory,nginx,Php,Linux,Memory,Nginx,合法的蜘蛛很好。它是网络的一部分,我很高兴他们能访问我的网站 没有一个授权蜘蛛刮我的网站是坏的,我想摆脱他们 我有一个PHP应用程序来监控我的网站访问文件。每次有可疑UserAgent的用户访问站点时,系统都会检查访问日志中是否有来自同一IP地址的条目,并对其行为做出判断。如果它不是人类,并且我没有授权它,那么它会被记录下来,我可以(或者不可以)采取阻止等措施 它的工作方式是,每次页面加载时,检查访问文件的过程都会发生。我只检查可疑用户代理,因此检查数量保持在最低限度 问题: 我想做的是检查访问

合法的蜘蛛很好。它是网络的一部分,我很高兴他们能访问我的网站

没有一个授权蜘蛛刮我的网站是坏的,我想摆脱他们

我有一个PHP应用程序来监控我的网站访问文件。每次有可疑UserAgent的用户访问站点时,系统都会检查访问日志中是否有来自同一IP地址的条目,并对其行为做出判断。如果它不是人类,并且我没有授权它,那么它会被记录下来,我可以(或者不可以)采取阻止等措施

它的工作方式是,每次页面加载时,检查访问文件的过程都会发生。我只检查可疑用户代理,因此检查数量保持在最低限度

问题: 我想做的是检查访问该站点的每一次访问(即检查访问文件的最后50行,查看是否有与该访问IP相关的访问)。但这意味着web服务器处理的每个子进程都希望打开一个访问日志文件。这听起来像是资源和I/O阻塞的噩梦

是否有一种方法可以将access.log文件“尾随”到某种中央内存中,所有web进程都可以同时(或至少非常快地)访问该内存。可能是将其加载到Memcache或类似程序中。但我如何实时做到这一点呢?因此,access.log文件的最后500行将持续加载到内存中(但随着时间的推移,只有500行被删除,而不是一个不断增加的数字)


简单来说:是否有php或linux或“其他”方式将不断增加的文件(即nginx日志文件)缓冲到内存中,以便其他进程可以同时访问信息(或至少比从硬盘读取文件更快).

重要的是要知道,一个写得好的服务总是能够模仿浏览器的行为,除非你做了一些非常奇怪的事情,会影响合法访问者的用户体验

但是,即使是处理复杂的刮刀,也有一些措施:

0忘记… …推荐人和UA字符串。这些很容易伪造,一些合法用户没有一个通用的。你会得到很多误报/否定,但收获不多

1.掐死 Apache或nginx等Web服务器具有核心或附加功能,可以限制某些请求的请求速率。例如,您可以允许每两秒钟下载一个*.html页面,但不限制JS/CSS等资产。(请记住,您还应该通过robots.txt通知合法的机器人程序延迟)

2.故障2ban Fail2ban的功能与您想做的类似:它扫描日志文件以查找恶意请求并阻止它们。它对恶意软件机器人非常有效,应该可以将其配置为处理刮刀(至少是不太聪明的刮刀)

--

以下是具体回答您问题的答案,但还有几个问题,您可以考虑:

3.修改内容 这实际上是一个非常有趣的问题:我们不时地对HTML页面和JSON提要进行一些小的(自动的)修改,这迫使scraper调整它们的解析器。有趣的是,当我们在他们的网站上看到过时的数据几天,直到他们赶上。然后我们再次修改它

4.限制:验证码和登录 除了web服务器级别的限制外,我们还计算每个IP地址每小时的请求数。如果超过一定数量(对于合法用户来说应该足够了),则每个对API的请求都需要解决验证码问题

其他API需要身份验证,因此它们甚至无法进入这些领域

5.滥用职权 如果从某个IP地址或子网获得定期访问,您可以对运行其机器人程序的网络服务执行WHOIS查找。通常情况下,他们有虐待方面的接触,而且这些接触者通常非常渴望听到违反政策的消息。因为他们最不想做的事就是进入黑名单(如果他们不合作,我们会将他们提交给黑名单)

此外,如果你在Slaper的网站上看到广告,你应该通知广告网络他们被用于被盗材料的情况

6.知识产权禁令 很明显,您可以阻止单个IP地址。我们所做的甚至是封锁整个数据中心,比如AWS、Azure等。网络上有所有这些服务的IP范围列表

当然,如果有合作伙伴服务从数据中心合法访问您的站点,您必须将其列入白名单

顺便说一句,我们不是在web服务器上这样做,而是在防火墙级别(IPtables)上这样做

7.法律措施 如果您认为scraper可能害怕您方面的法律行动,您应该毫不犹豫地联系他们,明确他们侵犯了您的版权和使用条款,他们可能会受到法律行动的约束

8.结论 毕竟,与刮刀作战是一场“与风车作战”,可能需要付出很多努力。你不可能阻止所有这些,但你应该专注于那些伤害你的事情,例如,浪费你的资源或赚属于你的钱


祝你好运

谢谢你的详细回答。我感兴趣的不是禁止/阻止scraper,而是识别与scraper相关的IP地址,并将这些信息提供给我的应用程序。因此,请注意第4点。限制:我对验证码和登录感兴趣。你说“我们每小时计算每个IP地址的请求数”。您使用什么来监视请求?我可以在我的日志文件上使用zcat/awk/grep做同样的事情,但那是事后的事。我想马上知道。。。比如说在第10个url被访问得太快而无法成为人类之后,我们确实在使用基于memcache的方法。我们在memcache中存储一个数组,其中IP地址是密钥