我正在编写Cloudformation来部署ELB原始CloudFront分配。除了我在AWS文档中找不到的一个选项外,我完成了它。我将所有流量重定向到https,因此我需要在我的发行版上设置行为,使用“全部”或“白名单”作为“基于所选请求标头的缓存”。可以在任何地方的Cloudformation中指定吗?如果是这样的话?
默认值为None,这是一个无效选项并返回错误:
要将SSL与ELB源一起使用,请转发所有标头或将主机标头列入白名单。如果您不想转发任何标头,请将原始协议策略更改为仅HTTP。
答案 0 :(得分:5)
在DefaultCacheBehavior
和CacheBehaviors
的成员中,您需要一个类似于此的ForwardedValues
:
{
"Cookies" : Cookies,
"Headers" : [ String, ... ],
"QueryString" : Boolean,
"QueryStringCacheKeys" : [ String, ... ]
}
Headers
是要转发的标头字符串数组,例如Host
。
当您尝试将ELB用作Origin时的错误是新的(在2018年1月左右添加)。
以前,配置已被接受,但实际上无法使用HTTPS,因为CloudFront要求源提供有效的SSL证书。
“有效”表示所有这些:
Host
标头。 (除非您将浏览器发送的Host
标头列入白名单,否则这两个值是相同的 - 传出请求的Host
标头设置为原始域名。)除非您转发Host
标头并且ELB上的证书与浏览器发送的Host
标头匹配,否则最后一个条件无法满足AWS发布的ELB主机名作为来源,因为您无法获得.amazonaws.com
子域的SSL证书,因为这不是您的域。这也意味着您无法在浏览器中使用指定的dzczcexample.cloudfront.net
主机名来测试HTTPS到使用ELB主机名作为原始域名的ELB源 - CloudFront将抛出502 Bad Gateway错误并抱怨它无法连接到原点。它实际意味着它无法验证原点,因为SSL证书的主题与CloudFront试图转发的请求不匹配。