我们有一个指向 CloudFront 发行版的通配符 (*) 子域。起源是API网关。
我们需要知道 API Gateway 中的原始 Host
header ,以便我们可以路由请求。
通过 HTTP 访问 CloudFront 分配时,仅将 CloudFront 中的 Host
header 列入白名单会返回错误 - 可能是因为 API Gateway 需要 Host
header 来了解要调用哪个 API。
如果是这种情况,是否可以通过 X-Forwarded-Host
将 Host
header 从 CloudFront 转发到 API 网关?或者...是否有其他方法可以通过 API Gateway 使用通配符子域?
最佳答案
我今天晚些时候才回答这个问题,尽管它有一个已接受的答案,因为这个问题出现在对此问题的搜索顶部:
如今,完全可以通过 X-Forwarded-Host
将原始 Host
header 从 CloudFront 动态转发到 API 网关,而无需硬编码自定义 header 按照建议的原始 header 。
这可以通过创建 Viewer Request edge function 来完成(Lambda@Edge 或 CloudFront 函数)在请求到达 CloudFront 之前拦截请求,将传入的 Host
header 映射到 X-Forwarded-Host
,然后附加新的X-Forwarded-Host
到请求的 header ,然后再传递。
然后将 API 网关源的 X-Forwarded-Host
header 列入白名单。
在 Node.js 中,边缘函数如下所示:
export function handler(event, context, callback) {
const request = event.Records[0].cf.request;
request.headers['x-forwarded-host'] = [{
key: 'X-Forwarded-Host',
value: request.headers.host[0].value
}];
return callback(null, request);
}
关于amazon-web-services - 将 CloudFront 主机 header 转发到 API 网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39222208/