Amazon web services 使用Lambda边缘将bot通信路由到不同的服务器

Amazon web services 使用Lambda边缘将bot通信路由到不同的服务器,amazon-web-services,aws-lambda-edge,Amazon Web Services,Aws Lambda Edge,我正在尝试将来自机器人(谷歌、Facebook等)的流量路由到AWS上由elastic beanstalk托管的完全不同的服务器 在寻找示例时,我只遇到将流量路由到另一个S3存储桶的人,如下所示: exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; let is_crawler = undefined; if ('is-crawler' i

我正在尝试将来自机器人(谷歌、Facebook等)的流量路由到AWS上由elastic beanstalk托管的完全不同的服务器

在寻找示例时,我只遇到将流量路由到另一个S3存储桶的人,如下所示:

exports.handler = (event, context, callback) => {
  const request = event.Records[0].cf.request;

  let is_crawler = undefined;
  if ('is-crawler' in request['headers']) {
    is_crawler = request['headers']['is-crawler'][0].value.toLowerCase();
  }
  if (is_crawler === 'true') {
    request.origin = {
      s3: {
        authMethod: 'origin-access-identity',
        path: '',
        domainName: 'redacted.s3-eu-west-1.amazonaws.com',
        region: 'eu-west-1,
        customHeaders: {}
      }
    };
  }
  callback(null, request);
};
我似乎还没有真正理解
request.origin
对象。我不明白为什么它会有一个专用于s3的属性?我也不明白如何使用这段代码将流量路由到像
api..com
这样的服务器


以前有人解决过这个问题吗?

我会在reddit上发布我收到的答案,因为我通常喜欢有助于将来参考的问题:

这个想法是,您在CloudFront和CloudFront中定义了多个源 您可以在中动态选择将请求转发给哪一个 你的Lambda@Edge功能。没有要求它被转发 S3源代码-这只是静态资产或 静态网站

例如,如果您有两个自定义原点,则可以将其用作 作为起点的示例: 您可能会使用UserAgent或 远程ip地址

这帮我解决了这个问题