用于动态路由的 AWS 边缘功能不起作用
AWS Edge function for dynamic routing not working
我在设置一个使用 Cloudfront@Edge 函数更改请求的自定义来源同时保留域名的简单示例时遇到了问题。
按照这个 guide and this 我有以下设置:
- 2 个 HTTP 负载均衡器,每个都有一个 lambda 函数。他们 return 一个带有区域 + body 中的所有 headers 的 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
触发器),代码如下:
'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
,则会显示“美国”内容,这是正确的。但是,如果发送包含我的 custom-header-value: DE
的 Curl/Postman 请求,我会一直看到美国信息:
当我期望改变原点时。
我错过了什么?
嗯...解决方法很简单。
所有 headers 都是数组,因此问题出在这里:custom_header.value == "DE"
实际上应该是 custom_header[0].value == "DE"
.
我在设置一个使用 Cloudfront@Edge 函数更改请求的自定义来源同时保留域名的简单示例时遇到了问题。
按照这个 guide and this
- 2 个 HTTP 负载均衡器,每个都有一个 lambda 函数。他们 return 一个带有区域 + body 中的所有 headers 的 HTTP 页面:
- 1 在美国:
custom-us.us-west-1.elb.amazonaws.com
- 1 个在欧盟:
custom-eu.eu-central-1.elb.amazonaws.com
- 1 在美国:
- 1 个云前端分发 (
mydistr.cloudfront.net
),具有 1 个来源,如指南中所述。我的默认行为来源是custom-us.us-west-1.elb.amazonaws.com
。缓存策略是Managed-CachingDisabled
. - 1 cloudfront@edge lambda 函数(带
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
,则会显示“美国”内容,这是正确的。但是,如果发送包含我的 custom-header-value: DE
的 Curl/Postman 请求,我会一直看到美国信息:
当我期望改变原点时。
我错过了什么?
嗯...解决方法很简单。
所有 headers 都是数组,因此问题出在这里:custom_header.value == "DE"
实际上应该是 custom_header[0].value == "DE"
.