AWS CloudFront phppBB3用户代理标头

时间:2015-02-01 16:16:04

标签: amazon-web-services amazon-cloudfront phpbb3

我正在尝试设置包含phpBB3以使用AWS CloudFront的网站。 phpBB3使用用户代理标头来检测机器人和蜘蛛,因此我在CloudFront行为中添加了一个白名单标头以转发用户代理,但这可以正常工作,但由于用户代理标头的排列数量,AWS会对此发出警告。

那么,在使用云前端时,有没有更好的方法在phpBB3中实现机器人的检测?

2 个答案:

答案 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);
};