我正在尝试设置包含phpBB3以使用AWS CloudFront的网站。 phpBB3使用用户代理标头来检测机器人和蜘蛛,因此我在CloudFront行为中添加了一个白名单标头以转发用户代理,但这可以正常工作,但由于用户代理标头的排列数量,AWS会对此发出警告。
那么,在使用云前端时,有没有更好的方法在phpBB3中实现机器人的检测?
答案 0 :(得分:1)
可能不是。我假设您要验证每个请求是否来自bot / spider?如果没有,也许你可以避免某些url模式的标题白名单(假设phpBB3不会将Cloudfront UA视为机器人/蜘蛛)并且仍然会获得一些性能提升。
另一个选项可能是可以添加到源请求的Cloudfront特定标头。 Cloudfront会自己进行UA检测,如果你已经将这些标题添加到白名单中,它们应该传递给原点:
CloudFront的-IS-Mobile的查看器
CloudFront的-IS-平板-查看器
CloudFront的-IS-桌面查看器
我不确定在机器人/蜘蛛的情况下会传递什么 - 你需要从亚马逊检查出来/得到澄清,但如果它们都是假的,那么也许你可以配置phpBB3来返回一个错误页面,然后将缓存为属于该类别的UA。
答案 1 :(得分:0)
为了减少由于“用户代理”而发送到原点的大量请求。白名单,一个解决方法是设置例如两个用户代理'值:一个用于实际请求,另一个用于Bots / Spiders / Crawler,并使用Lambda@Edge函数检查用户代理' 查看者请求,并将其更改为指定的两个值之一。 在下面找到可用于此的示例函数,可以根据您的需要进行更新:
'use strict';
exports.handler = (event, context, callback) => {
const headers = event.Records[0].cf.request.headers;
if ((headers['User-Agent'] == 'Googlebot') || (headers['User-Agent'] == 'MSN' || (headers['User-Agent'] == 'AbachoBOT' || (headers['User-Agent'] == 'Gigabot' || (headers['User-Agent'] == 'ia_archiver' || (headers['User-Agent'] == 'Tarantula')) {
headers['User-Agent'] = 'This is a Bot, Spider or Crawler - Do what you want :-)';
}
else {
headers['User-Agent'] = 'Amazon CloudFront - Real Request - Do what you want :-)';
}
callback(null, event.Records[0].cf.request);
};