如何阻止机器人对与 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 的请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Apache Web 服务器接受来自未知主机的请求
Confluence 6 在 Apache 或者系统级别阻止垃圾