如何阻止机器人对与 Apache 中的常见模式匹配的 URL 的请求?

Posted

技术标签:

【中文标题】如何阻止机器人对与 Apache 中的常见模式匹配的 URL 的请求?【英文标题】:How to block bot requests to URLs that match a common pattern in Apache? 【发布时间】:2011-06-06 03:55:24 【问题描述】:

我有一个 apache 服务器,它每 30 分钟一次被击中大约 100 次,请求与此模式匹配的 URL:

/neighborhood/****/feed

这些 URL 曾经有内容并且曾经是有效的。现在它们都是 404,所以这个机器人每次攻击我们时都会破坏性能。

我应该在我的 htaccess 文件中添加什么来阻止它?

注意:机器人位于 EC2 上,因此无法通过 IP 地址阻止。我需要阻止与该模式匹配的请求。

【问题讨论】:

【参考方案1】:

mod_rewrite?但我怀疑它可以在 apache 级别上做得更快。 我会看看 nginx 作为前端,它在 404 和规则性能方面都更加高效:-)

PS。此外,您可以尝试在某处返回重定向到 100Mb 文件以取笑这些机器人:-D

【讨论】:

mod_rewrite 看起来我需要使用。不确定实际的重写规则应该是什么样子。 @bflora: 403 和 410 很简单([F] 和 [G]),但我不确定在 mod_rewrite 中是否有快速到达 404 的方法。 [F] 会很棒。规则应该是什么样的?到目前为止我正在尝试这个没有成功: RewriteRule ^neighborhoods/([^/\.]+)/?$ windycitizen.com [F] RewriteRule pattern - [flags] 其中- 的意思是“实际上不要重写,只需应用标志” 正在寻找编写正则表达式的帮助。 :( 不过感谢您的提示!【参考方案2】:

在Apache前面放一个缓存系统或者CDN,allow your 404 responses to be cached.


403 可以通过mod_rewrite 轻松设置:

RewriteRule ^neighborhood/[^/]+/feed$ - [F]

【讨论】:

这比在我的 htaccess 中添加重写规则要多得多。 :)【参考方案3】:

使用 mod_rewrite 规则应该可以让你到达你想去的地方:

RewriteEngine On
RewriteCond %REQUEST_URI ^/neighborhood/[^/]+/feed$ [NC]
RewriteRule ^.*$ - [F,L]

以上内容进入您的 .htaccess 文件,或者如果您希望将其放在您的 vhost 文件中(因为您已关闭 .htaccess 解析以提高性能 - 一个好主意):

<Location />
RewriteEngine On
RewriteCond %REQUEST_URI ^/neighborhood/[^/]+/feed$ [NC]
RewriteRule ^.*$ - [F,L]
</Location>

给定一个 /neighborhood/carson/feed 的 URI,您应该期望得到如下响应:

禁止

您没有访问权限 /neighborhood/carson/feed 在此服务器上。

Apache/2.2.16 (Ubuntu) 服务器位于 ... 80 端口

这是在我在 Ubuntu 10.10 上运行 Apache/2.2.16 的本地 VM 上测试的。

【讨论】:

url中包含***/neighborhood/***等邻居时如何设置【参考方案4】:

以下代码可用于mod_rewrite中的404:

RewriteRule pattern -  [R=404] [other_flags]

【讨论】:

【参考方案5】:

以上答案屏蔽了所有用户,包括普通用户。我认为应该包括另一个条件来限制机器人:

RewriteEngine On
RewriteCond %HTTP_USER_AGENT ^.*(spider|HTTrack|Yandex|muckrack|bot).*$ [NC]
RewriteCond %REQUEST_URI ^/neighborhood/[^/]+/feed$ [NC]
RewriteRule ^.*$ - [F,L]

【讨论】:

以上是关于如何阻止机器人对与 Apache 中的常见模式匹配的 URL 的请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止创建名称与特定模式匹配的 MySQL 数据库

如何防止 Apache Web 服务器接受来自未知主机的请求

nginx 常见的问题

Confluence 6 在 Apache 或者系统级别阻止垃圾

apache_conf 阻止来自social-buttons.com的垃圾邮件机器人

全文索引:Apache Lucene