【问题标题】:AWS CloudFront phppBB3 user-agent headerAWS CloudFront phppBB3 用户代理标头
【发布时间】:2015-02-01 16:16:03
【问题描述】:

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

那么,在phpBB3中使用cloud front有没有更好的方法来实现机器人的检测呢?

【问题讨论】:

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


    【解决方案1】:

    可能不会。我假设您想验证 每个 请求不是来自机器人/蜘蛛?如果没有,也许您可​​以避免某些 url 模式的标头白名单(假设 phpBB3 不会将 Cloudfront UA 视为机器人/蜘蛛)并且仍然可以获得一些性能提升。

    另一个选项可能是可以添加到源请求的 Cloudfront 特定标头。 Cloudfront 会进行自己的 UA 检测,并且如果您已将这些标头添加到白名单,它们应该被传递到源:

    CloudFront 是移动查看器

    CloudFront 是平板电脑查看器

    CloudFront 是桌面查看器

    我不确定在机器人/蜘蛛的情况下会传递什么 - 你需要检查一下/从亚马逊获得澄清,但如果它们都是错误的,那么也许你可以配置 phpBB3 以返回一个错误页面,然后会为属于该类别的 UA 缓存。

    【讨论】:

    • 感谢您的回复,我正在调查 CloudFront-Is-xxx 标头,但我不愿意将它们用于机器人检测,以防非机器人提供错误的内容。我已经询问 AWS 是否有定义的机器人行为,但目前还没有回应。我认为这最好在 phpBB 方面解决,也许是通过 IP 地址检测机器人。我会在phpBB论坛上问。
    【解决方案2】:

    为了减少由于“用户代理”白名单而发送到源的大量请求,一种解决方法是设置两个“用户代理”值:一个用于真实请求,另一个用于机器人/蜘蛛/Crawlers 并使用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);
    };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2019-03-28
      • 2016-06-25
      • 2018-01-22
      • 2020-09-12
      • 2013-05-06
      • 2018-09-24
      相关资源
      最近更新 更多