暂时利用 Apache 上的 304 标头供爬虫使用

暂时利用 Apache 上的 304 标头供爬虫使用

我有一个客户,他有一个托管协议,有 400 个客户站点,全部通过 Apache 上的 CGI 模式的 SuPHP 托管。现在系统管理员已经离职,客户要求我推出一款新的 PHP 产品。问题是——现在服务器负载非常高,我们发现这是爬虫造成的。我们有一个客户特别抱怨网站速度慢,我们在他的网站上启用了一个 304 标头插件来对抗大多数爬虫,他的网站立即恢复了。

我们希望通过向所有爬虫程序发布全局 304 标头来降低负载,让人类访问者通过。我有一长串要捕获的用户代理关键字。

暂时启用全局 304 标头,同时允许人类访问者直接通过的最佳方法是什么?

我的意思是,我可以推出 400 个 .htaccess 文件更改,但理想的情况是在一个中央 Apache 配置中进行此更改,然后它会自动同时影响所有站点。

最新的:

我想我在一些文档中看到我可以像这样获取一些用户代理:

RewriteCond %{HTTP_USER_AGENT} ^(google|spider|crawl|bot|yahoo) [NC]

但是我该如何将这些用户代理与 304 标头匹配呢?我的意思是,这是语法吗?

RewriteCond %{HTTP_USER_AGENT} ^(google|spider|crawl|bot|yahoo) [NC]
Header set 304 "HTTP/1.0 304 Not Modified"

答案1

很难在没有细节的情况下提供具体的评论,但我假设您正在使用 .htaccess 文件中的 RewriteRules 来实现此行为。可以激活 mod_rewrite 模块,并且可以在 Apache 配置中使用 RewriteCond 和 RewriteRule 等声明。

如果您要进行大规模虚拟托管,那么一个好方法是制作一个包含规则的简单混合,并使用 Apache 的 Include 功能将该配置片段包含在爬虫程序造成问题的每个虚拟主机中。或者,Apache 模块可以减慢或阻止消耗过多资源的单个 IP。示例包括 mod_throttle、mod_evasive 和外部实用程序 fail2ban。

相关内容