首页 > 解决方案 > 用于动态路由的 AWS Edge 功能不起作用

问题描述

我无法使用 Cloudfront@Edge 函数设置一个简单的示例来更改请求的自定义来源,同时保留域名。

按照本指南和这个stackoverflow问题,我有以下设置:

'use strict';

module.exports.dynamic_routing = (event, context, callback) => {
  const request = event.Records[0].cf.request;  
  const originUSA = "custom-us.us-west-1.elb.amazonaws.com";
  const originEU = "custom-eu.eu-central-1.elb.amazonaws.com";

  var destDomain = originUSA;
 
  const custom_header = request.headers['custom-header-value'];
  if (custom_header && custom_header.value == "DE") {
      destDomain = originEU;
  }
  
  request.origin = {
      custom: {
          domainName: destDomain,
          port: 80,
          protocol: 'http',
          path: request.uri,
          readTimeout: 20,
          keepaliveTimeout: 5,
          customHeaders: {}
      }
  };
  request.headers['host'] = [{ key: 'host', value: destDomain}];
  
  callback(null, request);
};

我可以正确导航到两个负载均衡器并看到正确的内容,这证明负载均衡器 + 各自的 lambda 函数设置正确。

如果我导航到mydistr.cloudfront.net显示“美国”内容,这是正确的。但是,如果使用 Curl/Postman 发送请求,包括 my custom-header-value: DE,我会一直看到美国信息: 在此处输入图像描述

当我期望改变原点时。

我错过了什么?

标签: amazon-web-servicesamazon-cloudfront

解决方案


嗯......解决方案很简单。

所有的标题都是数组,因此问题就在这里:custom_header.value == "DE"它实际上应该在哪里custom_header[0].value == "DE"


推荐阅读