在使用Cloudfront@Edge函数更改请求的自定义来源同时保留域名时,我很难设置一个简单的示例。
custom-us.us-west-1.elb.amazonaws.comcustom-eu.eu-central-1.elb.amazonaws.commydistr.cloudfront.net),1原点,如指南所示。默认行为的来源是custom-us.us-west-1.elb.amazonaws.com。缓存策略是Managed-CachingDisabled。origin-request触发器)具有以下代码:'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 )发送请求,我会一直看到美国的信息:

当我想要改变原点的时候。
我遗漏了什么?
发布于 2021-07-12 10:49:04
Well...the溶液非常简单。
所有的头都是数组,因此问题就在这里:custom_header.value == "DE",实际上它应该是custom_header[0].value == "DE"。
https://stackoverflow.com/questions/68316201
复制相似问题