amazon-web-services - 将 CloudFront 主机 header 转发到 API 网关

标签 amazon-web-services amazon-cloudfront aws-lambda aws-api-gateway wildcard-subdomain

我们有一个指向 CloudFront 发行版的通配符 (*) 子域。起源是API网关。

我们需要知道 API Gateway 中的原始 Host header ,以便我们可以路由请求。

通过 HTTP 访问 CloudFront 分配时,仅将 CloudFront 中的 Host header 列入白名单会返回错误 - 可能是因为 API Gateway 需要 Host header 来了解要调用哪个 API。

如果是这种情况,是否可以通过 X-Forwarded-HostHost 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/

相关文章:

ruby-on-rails - 将 Cloudfront 设置为从不重新获取 Assets

amazon-web-services - 通过 aws cli 命令将新的存储库镜像部署到 lambda?

mysql - 通过 EB 使用 EC2 实例连接到 RDS 端点的问题

amazon-web-services - 尝试在 CloudFormation 上创建堆栈时,状态仅从 CREATE_IN_PROGRESS 更改为 ROLLBACK_COMPLETE

amazon-web-services - 如何禁用 AWS CloudFront 中的目录列表?

amazon-web-services - AWS Lambda : Even after STS:AssumeRole was successful, lambda 函数仍然使用旧的 IAM 角色

java - 如何在 aws lambda 中关闭 aws 客户端

c# - 如何从 Amazon S3 Bucket 获取最早添加的对象?

python - AWS Python 开发工具包 | Route 53 - 删除资源记录

amazon-web-services - AWS Cloudfront 失效完成后如何获得通知?