首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不工作的动态路由的AWS边缘函数

不工作的动态路由的AWS边缘函数
EN

Stack Overflow用户
提问于 2021-07-09 11:44:20
回答 1查看 163关注 0票数 1

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

在这个指南和这个堆栈过流问题之后,我有以下设置:

  • 2个HTTP负载平衡器,每个都具有lambda函数。它们返回一个带有区域+正文中的所有头的HTTP页面:
    • 1在美国:custom-us.us-west-1.elb.amazonaws.com
    • 1在欧盟:custom-eu.eu-central-1.elb.amazonaws.com

  • 1云锋分布(mydistr.cloudfront.net),1原点,如指南所示。默认行为的来源是custom-us.us-west-1.elb.amazonaws.com。缓存策略是Managed-CachingDisabled
  • 1 cloudfront@edge lambda函数(带有origin-request触发器)具有以下代码:
代码语言:javascript
复制
'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,就会显示"USA“内容,这是正确的。但是,如果通过Curl/Postman (包括我的custom-header-value: DE )发送请求,我会一直看到美国的信息:

当我想要改变原点的时候。

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 10:49:04

Well...the溶液非常简单。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68316201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档