如何通过远程主机名 / 域名阻止 Apache 中所有虚拟主机的蜘蛛 / 爬虫?

如何通过远程主机名 / 域名阻止 Apache 中所有虚拟主机的蜘蛛 / 爬虫?

我见过很多 robot.txt 的东西,还有一些看起来很有希望的 mod-rewrite 解决方案……但一直没能找到一个简单的解决方案来阻止蜘蛛/爬虫/任何我想阻止的人……我宁愿通过主机名/域名来做到这一点,因为它看起来比依赖用户代理等更简单……

例如,假设我在 Apache 日志中看到这个。

msnbot-207-46-192-48.search.msn.com - - [07/Dec/2011:23:01:41 -0500] "GET /%3f/$/bluebox/blog/2011/iphoto/ HTTP/1.1" 404 366

好的……我想阻止*.search.msn.com它来到这里,或我的任何网站 - 在我的任何文件夹中 - VHOST 或其他……

通常,我有许多<VirtualHost *.80>设置,并且不想为每个主机重复配置。同样,我有许多DocumentRoot...并且在每个设置中都放置一些文件,这.htaccess真的不是一个选择。

我一直在使用httpd.conf类似的东西......

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^BadBot [OR]

RewriteRule ^(.*)$ http://go.away/`

我如何使用提供的主机名来覆盖我想要的任何域名? UseCanonicalName OnDeny all

答案1

通过主机名来执行此操作可能不是最好的主意,因为 Apache 必须对每个请求进行查找。

为什么不使用 IPtables 来做呢?

答案2

UseCanonicalName是服务器主机名,而不是客户端的主机名。

VirtualHost只要您Order在 vhosts 中没有指令,这将在您的全局配置中正常工作,在任何之外:

Order Allow,Deny
Allow from all
Deny from search.msn.com

相关内容