0

我正在尝试将来自机器人(谷歌、Facebook 等)的流量路由到在 AWS 上使用弹性 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.<domainname>.com.

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

4

1 回答 1

0

我将在 reddit 上发布我收到的答案,因为我通常喜欢这样的问题,以供将来参考:

这个想法是您在 CloudFront 中定义了多个来源,并且您可以在 Lambda@Edge 函数中动态选择将请求转发到哪个来源。不需要将其转发到 S3 源 - 这只是静态资产或静态网站的常见用例。

对于您的示例,如果您有 2 个自定义来源,则可以将此作为示例作为起点: https ://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html#lambda-examples- content-based-geo-header 您可能会使用 UserAgent 或远程 IP 地址,而不是国家/地区标头。

https://www.reddit.com/r/aws/comments/fawh6l/routing_bottraffic_to_different_server_with/

这帮助我解决了它。

于 2020-02-28T18:18:25.920 回答