我有一个ELB,我想把它放在CloudFront后面。假设ELB是一个例子,美国东部-1.elb.amazonaws.com。它只接受主机头设置为www.example.com的请求,我现在想用CloudFront托管请求。可以告诉CloudFront使用这个Host
头吗?当我试图在AWS控制台中为Host
设置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)
。
发布于 2017-12-19 01:38:11
假设,如果ELB上的服务只回答www.example.com
,那么这就是您要指向CloudFront的主机名-因此,您的解决方案很简单:在缓存行为设置中,白名单上的Host
头转发到原点。
在此配置中,CloudFront通过浏览器发送的Host
标头,必须将其添加到发行版配置中的备用域名列表中。对dzzzexample.cloudfront.net
的请求将失败,因为您的来源不会理解它们,但这通常是好的,因为您不想让搜索引擎在CDN域名下索引您的内容。
不过,这可能不是你的计划。如果该配置不适用于您的应用程序,则需要Lambda@边缘源请求触发器来修改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);
};
注意,Host
头在Origin触发器中是不可变的,除非您将缓存行为配置为白名单Host
头,如上面所述。在本例中,您是在白名单由Lambda@Edge触发器设置的Host
头,而不是浏览器设置的头部,但是CloudFront配置是相同的。
您不能在Host
中使用CloudFront中的静态自定义源头配置--这不是支持的配置。Lambda触发器具有与设置相同的效果,如果允许的话。
https://serverfault.com/questions/888714
复制相似问题