我正在一个网站上工作,这将允许下载到用户,将有大约2,000,000个文件可以下载。
我们希望阻止用户抓取所有这些文档,以便限制我们在一定时间范围内包含URL模式的请求的数量。 我们很高兴该网站的其余部分被抓取,所以不想限制。
我们正在排除robots.txt阻止爬虫获取文件。 我们更担心恶意或不当行为。
我们希望使用apache来限制每个ip地址每分钟大约1次的文档下载次数。
有没有最好的做法呢?
我们使用apache2.2的Centos
有很多类似的问题,但大多数似乎集中在带宽限制,这不是我想要的。
我不认为它存在一个模块来限制每个IP每个时间的连接。 但是你应该用limitipconn和mod_cband来玩一点点……可能一起可以做到这一点。 或者你可以在iptables中使用limitipconn。
要做到这一点,你可能应该使用iptables:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 1/minute -j ACCEPT
我没有testing这个规则,只是提示你应该看什么。
如果你使用iptables,你的主站点和文档部分应该有2个ip和不同的虚拟主机,以限制文件的ip(虚拟主机)。
问候
你应该可以使用mod_evasive,在那里你可以限制一个IP地址在特定的时间内被允许对一个特定的URI或站点做多less个请求。
如果一个IP地址超过这个限制,它会被阻塞一段时间,如果用户再次尝试访问URI,将会得到一个403错误。 您也可以发送邮件,或者当IP地址超出限制时执行脚本。
欲了解更多信息: http : //www.zdziarski.com/blog/?page_id = 442
你似乎正在寻找类似于像RapidShare这样的网站。 据我所知,你不能在Apache的configuration文件中这样做; 至less需要服务器端脚本(可能是PHP)和一个小型数据库来跟踪请求,并在用户满足条件时提供下载。
下面是一个PHP和MySQL的例子,需要适应一下你的情况: http : //www.web-development-blog.com/archives/limit-the-number-of-downloads-per-client /
上面的代码限制了单个下载的连接数量,但正如你所看到的,这个概念可以扩展到限制下载次数。