Car*_*arl 4 amazon-cloudfront amazon-web-services
我有一个 ELB,我想放在 CloudFront 后面。假设 ELB 是 example.us-east-1.elb.amazonaws.com。它只接受 Host 标头设置为 www.example.com 的请求,我现在想用 CloudFront 托管它。是否可以告诉 CloudFront 使用此Host标头?当我尝试Host在 AWS 控制台中为 CloudFront设置标头时,我收到错误消息com.amazonaws.services.cloudfront.model.InvalidArgumentException: The parameter HeaderName : Host is not allowed. (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidArgument; Request ID: dead-beef-badc0ffee1)。
据推测,如果 ELB 上的服务只响应www.example.com那么这就是您将指向 CloudFront 的主机名——因此,您的解决方案很简单:在缓存行为设置中,将Host转发到源的标头列入白名单。
在此配置中,CloudFront 传递Host浏览器发送的标头,必须将其添加到分配配置中的备用域名列表中。请求dzzzexample.cloudfront.net将失败,因为您的来源不会理解它们,但这通常是好的,因为您不希望搜索引擎在 CDN 域名下索引您的内容。
但是,这可能不是您的计划。如果该配置不适用于您的应用程序,您需要一个 Lambda@Edge 源请求触发器来修改Host标头。
'use strict';
// force a specific Host header to be sent to the origin
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
request.headers.host[0].value = 'www.example.com';
return callback(null, request);
};
Run Code Online (Sandbox Code Playgroud)
请注意,Host源请求触发器中的标头是不可变的,除非您将缓存行为配置Host为如上所述将标头列入白名单。在这种情况下,您将HostLambda@Edge 触发器设置的标头列入白名单,而不是来自浏览器的标头,但 CloudFront 配置是相同的。
您不能Host在 CloudFront 中的静态自定义源标头配置中使用 - 这不是受支持的配置。如果允许,Lambda 触发器具有与设置相同的效果。
| 归档时间: |
|
| 查看次数: |
8422 次 |
| 最近记录: |