你不能做类似的事情/etc/hosts
在 CloudFront 上——它始终使用公共 DNS 来解析源。
然而,你仍然可以做你想做的事——但你只需要理解why这个解决方案确实是您想要的,因为它看起来不是(正如您在评论中指出的那样)。
在 Route 53 中,为源服务器的新主机名创建新的 A 记录,例如 origin.example.com。您根本不需要在源服务器上的任何位置配置此值。您的源服务器仍然认为它是 www.example.com。
在 Route 53 中,创建指向 origin.example.com 的别名 A 记录 www.example.com。
此时,您的网站完全按照您的期望和要求运行。主机名“origin.example.com”位于解析路径中,但此信息对于源站来说是不可见且未知的。
在 CloudFront 中,创建分配,将原始域名设置为 origin.example.com,并将分配的备用域名设置为 www.example.com。
在每个缓存行为的设置中,确保Host
标头被列入白名单以转发到源。
将 www.example.com 的 Route 53 别名更改为指向您的 CloudFront 分配。
当请求到达 CloudFront 时,请求会保留Host: www.example.com
标头。 CloudFront 使用 DNS 查找 IP 地址origin.example.com
however,它仅使用此信息来建立与源的连接。传入请求仍发送至 www.example.com。如果源具有 www.example.com 的 SSL 证书,CloudFront 会将其视为有效,因为您配置了Host
白名单标头,并且它与证书匹配。
在此配置中,使用浏览器地址栏中分配的 dzczcexample.cloudfront.net 主机名访问 CloudFront 分配将不起作用,因为 CloudFront 将发送that主机名指向源,但一旦您将 www.example.com 的 Route 53 别名指向分配的 cloudfront.net 域名,请求将得到正确处理。